Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 界面和立面设计模式_C#_Design Patterns_Interface_Facade - Fatal编程技术网

C# 界面和立面设计模式

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

我一直在使用门面设计模式来将所有的管理层组合在一起 我在程序中需要的函数性

在我的类库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的接口,比如我使用子类和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允许在接口中使用嵌套类型。如果希望以这种方式指定契约,可以使用不带实现的抽象类而不是接口,但这会产生继承问题