请教各位一个关于类的设计的问题: 譬如我系统中有用户的信息,我需要设计一个用户的类(class User),还有我要有登录、新增用户,修改用户,删除用户,查询用户的功能,那么我这些方法是放到用户类中呢,还是再设计一个管理的类(class UserSystem),把这些方法作为这个类的方法?各位是怎么设计类的呢?如果这样:用户类专门封装用户信息,另一个类负责业务逻辑
但是这样好像不太符合面向对象的类的设计原则了,类应该具有某个方法,而不是只是封装数据结构,我觉得我难以归纳出类应该具有的方法(比如刚才的用户类User应该具有哪些方法) “登陆”这个方法是归为类User的方法还是应该归为UserSystem的方法呢?
但是这样好像不太符合面向对象的类的设计原则了,类应该具有某个方法,而不是只是封装数据结构,我觉得我难以归纳出类应该具有的方法(比如刚才的用户类User应该具有哪些方法) “登陆”这个方法是归为类User的方法还是应该归为UserSystem的方法呢?
我倾向于分成两层:
下层是数据实体,只包含数据结构,即只有用户信息;数据实体类可以由一个统一的实体操作类实现基本的CRUD操作,也可以每个实体一个操作类来操作;
上层是DomainModel,就有用户登录/保存/装载功能了;它自己调用实体操作类操作实体来实现这些功能;将数据和操作分离有个好处,即你将来或许决定改变访问数据库的方法,不用修改数据结构类,只需要改操作类;其实这里的分层都是这样的,希望借助一个层将对上层的修改尽量不影响下层,对下层的修改尽量不影响上层.
...
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();
}
}
{
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];}
{}