浅谈实体类设计

百度百科说:实体类表示系统中的信息存储,它们一般用于表示系统所管理的核心概念。实体对象经常是被动和永久性的。它们的主要职责是存储和管理系统中的信息。

 

从概念我们可以看出,实体是比较稳定的。由于实体对象的相对稳定性,我们可以利用各种实体类生成器来生它。

 

所以,我在最开始学习它的时候,我给它的定义是,灵活性小,没有太大变化。甚至认为实体类就是实现属性的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();
        }
    }

 

在代码六中,我们还可以添加自己想添加的别的属性和相应的访问期,以及新的构造方法等。

在关于实体类,目前我知道的大概就这些,还有哪些我不知道,欢迎指教。

posted on 2012-05-06 21:14  刘正权的博客  阅读(522)  评论(0编辑  收藏  举报