代码之家  ›  专栏  ›  技术社区  ›  Xaisoft

什么是更好的OO设计方案?为什么?

  •  2
  • Xaisoft  · 技术社区  · 14 年前

    如果我有一个用户,并且我希望该用户注册,那么用一个接受用户的注册方法来注册类更好吗,或者用一个拥有注册方法的用户对象就足够好了

    public class Registration
    {
        public void Register(User user)
        {
    
        }
    }
    
    public class User
    {
        public void Register()
        {
    
        }
    }
    

    这样做有什么好处?

    5 回复  |  直到 14 年前
        1
  •  6
  •   Chris Roberts    14 年前

        2
  •  2
  •   kbrimington    14 年前

    User Register()

        3
  •  2
  •   tster    14 年前

    public interface IRegisterable
    {
        // ... something makes me registerable....
    }
    
    public class User : IRegisterable
    {
    }
    
    public class Register
    {
       public void Register(IRegisterable item) { }
    }
    

        4
  •  1
  •   THX-1138    14 年前

    public class UserRegistry {
        public void Register(User user) {...}
    }
    

    public class UserRegistrar {
        public void Register(User user, IUserRegistry userRegistry) {...}
    }
    
    public class MyApplicationClient : IUserRegistry {}
    
    public IUserRegistry {
        // Add, Remove, IsRegistered
    }
    

        5
  •  0
  •   Josh Smeaton    14 年前

    class User : IMember {} 
    class Group : IMember {}
    
    class Resource : IResource {}
    
    // Assumes the User is already Authenticated in some way...
    class Authorisation
    {
        static bool IsAuthorised(IMember member, IResource resource) {}
        static bool IsDenied(IMember member, IResource resource) {}
        static bool IsAnyDenied(IEnumerable<IMember> members, IResource resource) {}
        static bool IsAnyAuthorised(IEnumerable<IMember> members, IResource resource) {}
    }
    
    class System
    {
        bool CanEnterAdminArea(User user, IResource admin) 
        {
            IEnumerable<Group> groups = u.Groups;
    
            if ( Authorisation.IsAnyDenied( groups, admin ) { return false; }
            if ( Authorisation.IsDenied( user, admin ) { return false; }
    
            return (Authorisation.IsAuthorised( user, admin ) 
                 || Authorisation.IsAnyAuthorised( groups, admin ));
    
    
        } 
    
    }