首先解释什么叫“实体类和操作类的分离”?
实体,我原先称载体,我觉得这样更加贴切一些,顾名思义是承载数据的对象,我们看见的DataSet就是这个冬冬;
操作类,专业称呼好像叫什么“领域模型”什么的(我是土包子一个,不懂那么多专业术语),就是对实际数据库的操作,最常见的就是CRUD操作了。
那么不分离的设计是什么样的呢?ADO(COM时代的ADO)就是不分离的设计,他重要的对象Recordset就包含了AddNew,Update等对数据库的操作,又包含了Fields集合用来检索记录中的数据,其实这种设计还包括Java中的EJB以及XPO ;
分离的对象设计最经典的就是ADO.NET,DataSet是实体,用来承载数据,他不负责任何的对数据库的操作,而具体的操作分配给Command。PDO、Grove.NET 、ObjectSpaces都是这样的设计思想。
为什么分离?
1、MS在解释ADO的“升级”目的时,就说了是为了更好的做分布式开发,因为分布式开发需要将实体传输到客户端,而如果实体包含了Save之类的方法,那将是多么糟糕的设计(虽然实际上是不能Save的);
2、实体的独立,这可以使职能更加清晰,这样可以方便的实现剪贴板、序列化、回收站等等功能,因为我不再关心实体是否一定是存在数据库中,可以是文件、序列化后的一个字段或者一个流中。
3、说一个赖皮的理由
:不分离的设计都是早期的设计,后设计的都是分离的。
实体,我原先称载体,我觉得这样更加贴切一些,顾名思义是承载数据的对象,我们看见的DataSet就是这个冬冬;
操作类,专业称呼好像叫什么“领域模型”什么的(我是土包子一个,不懂那么多专业术语),就是对实际数据库的操作,最常见的就是CRUD操作了。
那么不分离的设计是什么样的呢?ADO(COM时代的ADO)就是不分离的设计,他重要的对象Recordset就包含了AddNew,Update等对数据库的操作,又包含了Fields集合用来检索记录中的数据,其实这种设计还包括Java中的EJB以及XPO ;
分离的对象设计最经典的就是ADO.NET,DataSet是实体,用来承载数据,他不负责任何的对数据库的操作,而具体的操作分配给Command。PDO、Grove.NET 、ObjectSpaces都是这样的设计思想。
为什么分离?
1、MS在解释ADO的“升级”目的时,就说了是为了更好的做分布式开发,因为分布式开发需要将实体传输到客户端,而如果实体包含了Save之类的方法,那将是多么糟糕的设计(虽然实际上是不能Save的);
2、实体的独立,这可以使职能更加清晰,这样可以方便的实现剪贴板、序列化、回收站等等功能,因为我不再关心实体是否一定是存在数据库中,可以是文件、序列化后的一个字段或者一个流中。
3、说一个赖皮的理由

【推荐】国内首个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语句:使用策略模式优化代码结构