请教各位一个关于类的设计的问题:    譬如我系统中有用户的信息,我需要设计一个用户的类(class User),还有我要有登录、新增用户,修改用户,删除用户,查询用户的功能,那么我这些方法是放到用户类中呢,还是再设计一个管理的类(class UserSystem),把这些方法作为这个类的方法?各位是怎么设计类的呢?如果这样:用户类专门封装用户信息,另一个类负责业务逻辑 
    但是这样好像不太符合面向对象的类的设计原则了,类应该具有某个方法,而不是只是封装数据结构,我觉得我难以归纳出类应该具有的方法(比如刚才的用户类User应该具有哪些方法)     “登陆”这个方法是归为类User的方法还是应该归为UserSystem的方法呢? 

解决方案 »

  1.   

    这个问题具有代表性.我的理解:
    我倾向于分成两层:
    下层是数据实体,只包含数据结构,即只有用户信息;数据实体类可以由一个统一的实体操作类实现基本的CRUD操作,也可以每个实体一个操作类来操作;
    上层是DomainModel,就有用户登录/保存/装载功能了;它自己调用实体操作类操作实体来实现这些功能;将数据和操作分离有个好处,即你将来或许决定改变访问数据库的方法,不用修改数据结构类,只需要改操作类;其实这里的分层都是这样的,希望借助一个层将对上层的修改尽量不影响下层,对下层的修改尽量不影响上层.
      

  2.   

    三层体系一般都是这样分:ui,busniess,data你的User应该属于data层,UserSystem属于busniess层。
      

  3.   

    两个类,一个User,一个UserList,UserList是User的集合,ArrayList看一个例子.
    ...
    using System.Collections ;
    .....
    public class User
    {
    public Program()
    {

    }
              
               //查询.
               pubulic static UserList getUserList(string keyword)
              {
            
              }
              public void update()
              { 
              }
           .....
    }public class UserList : ArrayList
    {
    public void Sort(string sortfield, bool isAscending)
    {
    base.Sort(new ListComparer(Type.GetType ("User"),sortfield));
    if (!isAscending) base.Reverse();
    }
    }
      

  4.   

    接口大致如下,功能包括但不仅限于:class UserManager
    {
        User CreateUser(.......);
        void DeleteUser(string userId);
        UserState Login(string userId, string password);
        User GetUser(string userId);
        UserSet GetUserSet();
    }class User
    {
         //N个属性
         //......
         void Delete();
         void Save();
    }class UserSet
    {
        User this[int];
    User this[int];}
      

  5.   

    class UserState : User
    {}