浅谈实体类设计
百度百科说:实体类表示系统中的信息存储,它们一般用于表示系统所管理的核心概念。实体对象经常是被动和永久性的。它们的主要职责是存储和管理系统中的信息。
从概念我们可以看出,实体是比较稳定的。由于实体对象的相对稳定性,我们可以利用各种实体类生成器来生它。
所以,我在最开始学习它的时候,我给它的定义是,灵活性小,没有太大变化。甚至认为实体类就是实现属性的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(); } }
在代码六中,我们还可以添加自己想添加的别的属性和相应的访问期,以及新的构造方法等。
在关于实体类,目前我知道的大概就这些,还有哪些我不知道,欢迎指教。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构