Ich habe ein Fassadenmuster verwendet, um alle administrativen Funktionen in meinem Programm zusammenzufassen.Schnittstellen und Fassaden Design Patterns
in meiner Klassenbibliothek Company.Infrastructure.Repositories.Administration ich habe:
[Pluggable("Default")]
public class AdminRepository : IAdminRepository
{
#region private members
#endregion
#region protected members
protected Membership _membership;
protected Permissions _permissions;
protected Application _application;
protected Profile _profile;
#endregion
public AdminRepository()
{
_membership = new Membership();
_permissions = new Permissions();
_application = new Application();
_profile = new Profile();
}
protected class Profile
{
public Profile() {}
public void ProfileMethod1(){}
public void ProfileMethod2(){}
}
protected class Membership
{
public Membership() {}
public User GetUser(Guid id)
{
using (var dc = new My_SdbDataContext())
{
var user = dc.aspnet_Users.Where(x => x.UserId == id).FirstOrDefault();
var membership = dc.aspnet_Memberships.Where(x => x.UserId == id).FirstOrDefault();
return Convert.ToEntity(user, membership);
}
}
public User GetUser(string userName)
{
using (var dc = new My_SdbDataContext())
{
var user = dc.aspnet_Users.Where(x => x.UserName == userName).FirstOrDefault();
var membership = dc.aspnet_Memberships.Where(x => x.UserId == user.UserId).FirstOrDefault();
return Convert.ToEntity(user, membership);
}
}
public IEnumerable<User> GetUsers(Guid applicationId)
{
var userList = new List<User>();
using (var dc = new My_SdbDataContext())
{
var users = dc.aspnet_Users.Where(x => x.ApplicationId == applicationId).ToList<aspnet_User>();
userList.AddRange((IEnumerable<User>) (from user in users
let membership = dc.aspnet_Memberships.Where(x => x.UserId == user.UserId).FirstOrDefault()
select Convert.ToEntity(user, membership)));
}
return userList;
}
}
etc...
}
Das ist für mich gut funktioniert hat. Wir sind jedoch zu einem DDD-Modell übergegangen und versuchen herauszufinden, wie ich weiterhin von einem WCF-Dienst auf mein AdminRepository (ehemals AdminFactory) zugreifen kann.
Um Zugriff zu erhalten, habe ich die Schnittstellen zu meinen Repository-Klassen in meiner Domain-Logik enthalten. Ich bin mir jedoch nicht ganz sicher, wie ich eine Schnittstelle zu einer Fassade erstellen soll, so wie die, die ich habe (mit Unterklassen und allen). Ist das möglich?
Wie mache ich das?