私はファサード デザイン パターンを使用して、プログラムに必要なすべての管理機能をグループ化しています。
私のクラス ライブラリ Company.Infrastructure.Repositories.Administration には次のものがあります。
[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...
}
これは私にとってはうまくいきました。ただし、DDD モデルに移行したため、WCF サービスから引き続き AdminRepository (以前の AdminFactory) にアクセスする方法を見つけようとしています。
アクセスを実現するために、ドメイン ロジックにリポジトリ クラスへのインターフェイスを含めています。ただし、私が持っているような Facade へのインターフェイスを作成する方法がよくわかりません (サブクラスとすべてを使用)。これは可能ですか?
どうすればいいですか?