浅谈实体类设计
百度百科说:实体类表示系统中的信息存储,它们一般用于表示系统所管理的核心概念。实体对象经常是被动和永久性的。它们的主要职责是存储和管理系统中的信息。
从概念我们可以看出,实体是比较稳定的。由于实体对象的相对稳定性,我们可以利用各种实体类生成器来生它。
所以,我在最开始学习它的时候,我给它的定义是,灵活性小,没有太大变化。甚至认为实体类就是实现属性的get与set方法。这两个访问器实现属性的读与写。
代码一:
/// <summary> /// 用户表 /// </summary> class UserInfo { private string userID;//用户ID private string password;//密码 private string level; //权限 public string UserID { get { return userID; } set { userID = value; } } public string PassWord { get { return password; } set { password = value; } } public string Level { get { return Level; } set { level = value; } }
随着学习的深入,我们越来越认识到:实体类这个“老实人”,有时候并不像他名字起的一样那么老实。时不时来点花样,也会让你眼前一亮。
实体类合适的设计,能够很好的实现信息的隐蔽,使代码更加简洁。
后来,慢慢知道,实体类中加上构造方法,能够使得代码看起来很整齐。
我们给实体中属赋值的时候,只用这样:
代码二:
/// <summary>
/// 默认的构造方法
/// </summary>
public UserInfo() { }
/// <summary>
/// 带参数的构造方法
/// </summary>
/// <param name="UserID">用户ID</param>
/// <param name="PassWord">密码</param>
/// <param name="Level">权限</param>
public UserInfo(string UserID,string PassWord,string Level)
{
this.userID = UserID;
this.password = PassWord;
this.level = Level;
}
开始时,我们难免在U层写这样的代码:
代码三:
txtUserID.Text=dt.Rows[0]["UserID"].ToString();
我想只要你学过三层架构,写出这样的代码,你一定是怀着内疚的心情写出来的。在U层调用方法的时候,还需要知道数据库中的字段名。
这是,我们只需对实体类稍动手脚,写一个类似下面的构造方法,就可以解决这个问题。对外面暴露的是实体中字段,而不是数据库中字段。
代码四:
/// <summary> /// 构造方法,实现字段隐藏 /// </summary> /// <param name="dt"></param> public UserInfo(DataTable dt) { this.userID = dt.Rows[0]["UserID"].ToString(); this.password = dt.Rows[0]["Password"].ToString(); this.level =dt.Rows[0]["Level"].ToString(); }
以上代码均出自同一段代码。其实,实体类的使用是非常灵活的。各层之间传递实体,能够很好的实现信息隐藏,实现代码的复用(怎样复用这里不做具体介绍)。
另外,在项目开发中,往往设计出好的实体类,会对项目的开发以及后期的维护工作,起到非常的好的作用;相反,相对较差的实体类设计,会让你的工程越来越像一堆垃圾。
此外,实体类中还可以设置彼此之间的继承。将代码一和代码二合在一起组成代码五,下面代码继承代码五:
代码六:
class UserManager : UserInfo { /// <summary> /// 默认的构造方法 /// </summary> public UserManager() { } /// <summary> /// 带参数的构造方法 /// </summary> /// <param name="UserID">用户ID</param> /// <param name="PassWord">密码</param> /// <param name="Level">权限</param> public UserManager(string UserID, string PassWord, string Level) : base(){} /// <summary> /// 构造方法 /// </summary> /// <param name="dt"></param> public UserManager(DataTable dt) { base.UserID = dt.Rows[0]["UserID"].ToString(); base.PassWord = dt.Rows[0]["Password"].ToString(); base.Level =dt.Rows[0]["Level"].ToString(); } }
在代码六中,我们还可以添加自己想添加的别的属性和相应的访问期,以及新的构造方法等。
在关于实体类,目前我知道的大概就这些,还有哪些我不知道,欢迎指教。