谈O/R Mapping设计中实体类和操作类的分离

首先解释什么叫“实体类和操作类的分离”?
实体,我原先称载体,我觉得这样更加贴切一些,顾名思义是承载数据的对象,我们看见的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、说一个赖皮的理由:不分离的设计都是早期的设计,后设计的都是分离的。
posted @ 2005-07-04 12:57 编写人生 阅读(2113) 评论(3)  编辑 收藏

  回复  引用  查看    
#1楼 2005-07-04 13:52 | Arbean.Wu      
好!又看见大师的文章了,学习ing...
  回复  引用    
#2楼 2005-07-05 00:03 | wjzhou [未注册用户]
楼主是反潮流而动啊
  回复  引用    
#3楼 2006-07-25 09:58 | tadxdsd [未注册用户]
非常支持楼主的观点

分离感觉还有一个好处 容易复用

比如你写了一个Broker类 那个类在那个系统中应该都可以很好的工作,而无须再修改什么了

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交