C# 界面和立面设计模式
我一直在使用门面设计模式来将所有的管理层组合在一起 我在程序中需要的函数性 在我的类库Company.Infrastructure.Repositories.Administration中,我有:C# 界面和立面设计模式,c#,design-patterns,interface,facade,C#,Design Patterns,Interface,Facade,我一直在使用门面设计模式来将所有的管理层组合在一起 我在程序中需要的函数性 在我的类库Company.Infrastructure.Repositories.Administration中,我有: [Pluggable("Default")] public class AdminRepository : IAdminRepository { #region private members #endregion #region protected me
[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的接口,比如我使用子类和all创建的接口。这可能吗
我该怎么做 我不明白为什么要创建包含嵌套类的AdminRepository接口。根据你的代码,我想你会
public interface IAdminRepository
{
bool MemberHasPermission(int id)
//and so on - you didn't provide any methods, so I'm making one up
// ...
}
此时,您的IAdminRepository指定了契约,为什么契约还要在受案例保护的嵌套类中指定实现
请注意,这并不意味着我理解您对受保护的嵌套类的使用,也不意味着当所有抽象组件实际上都是内部实现时为什么称之为facade模式,也不意味着为什么移动到DDD模型会使从WCF访问存储库变得困难。然而,我当然不明白为什么要尝试在接口中指定嵌套类,但c在任何情况下都不允许。请注意,VB允许在接口中使用嵌套类型。如果希望以这种方式指定契约,可以使用不带实现的抽象类而不是接口,但这会产生继承问题