狂人思维·成都
Google
软件架构,开则持续,合则稳健;亦开亦合,刚柔并济;讲究平衡如同生活之中庸和谐.
E-MAIL:guojian。zhang@gmail。com
posts - 19,  comments - 62,  trackbacks - 0

最近在javaEye上看到有关Domain Driving Model Design的激烈讨论,让我对DOMAIN MODEL的理解更深刻了不少,趁现在意犹未尽之际,结合我在项目中的实际经验将讨论中的一些结论摘录并总结出来:

首先引用说明一下Domain Model 的定义:

Domain Model An object model of the domain that incorporates both behavior and data.

Domain Model 分两种:

1  Simple Domain Model (Active Record)

它的特点是POJOTABLE STRUCTURE一一对应,建模基于数据库设计。Hibernate走的就是这个路子,说它贫血,意思就是指它只有data,没有behavior(但我们实际可以通过HBM文件的定义和映射,在PO中适当的加入一些基本的业务逻辑的。)

在这种模式下,POJO自己的CRUD操作都应该放在自己的类里面。其他复杂的业务逻辑会放到外面的Service layer

2  Rich Domain Model (Data Mapper)

它的特点是POJOTABLE STRUCTURE并不一一对应,建模天马行空,完全取决于业务逻辑。domain objecttable之间的mapping,由Data Mapper完成,domain object不用管数据表是何等结构,甚至不用管Data Mapper怎么操作。

 

1.识别某种业务行为的一个很确定的原则:

       domain logic只应该和这一个domain object实例状态(并非“持久”状态)有关,而不应该和一批domain object的状态有关.

进一步的说:主要看logic是否只和这个object(注:指自身)的状态有关,如果只和这个object(注:指自身)有关,就是domain logic;如果logic是和一批domain object(注:指同类型的实体)的状态有关,就不是domain logic,而是business logic

 

2.Domain Model Hibernate PO 的区别:

领域模型的代码实现需要用一组互相协作的类来完成,每一个或者一组类承担这个领域模型的某个特征。而Hibernate的实体类只不过是其中的一组类,它承担的职责就是保持领域模型的状态的。

 

3.基于Domain Model 分析与设计的方法规则:

应该由领域模型来驱动你的软件内在规则,由需求驱动你的软件外在交互.

 

最后,我想补充的是:根据目前的O/R Mapping技术,我们在实际项目开发中,能真正做到 富领域模型 还不现实(因为我们还要考虑诸如性能、目前O/R持久化特性等等问题),更何况,我们的MODEL DATA最终需要被持久化,因此,我比较反对在DOMAIN MODEL 中直接通过任何方式做任何持久化操作,因为这会让你所设计的MODEL无法独立化,难以单元测试,并且与加入了一些外界无关的东西,这不符合对象的本质(对象本身是不能持久化的)。虽然我们做不到完整意义上的Domain Driving Model Development,但我们可以在项目实际开发中因为性能、结构简化等等上面得到补偿,这已经值得欣慰了。

posted on 2005-04-07 09:44 狂人思维·成都 阅读(1636) 评论(5)  编辑  收藏 所属分类: JAVA技术J2EE应用

FeedBack:
# re: Domain Driving Model Design之总结与我的选择
2005-04-07 13:47 | floerggyy
好,又长见识了,还有什么心得快贴出来 ̄ ̄ ̄ ̄靠  回复  更多评论
  
# re: Domain Driving Model Design之总结与我的选择
2005-04-09 15:04 | idior
good, 原来Hibenate是这样的我说怎么觉得它没怎么谈行为呢.不是很喜欢.
目前有比较成熟的Rich的ORM吗?  回复  更多评论
  
# re: Domain Driving Model Design之总结与我的选择
2005-04-23 18:33 | calvin
hibernate根本不是active record,而是第2种模式。因为他和TopLink,JDO一样,需要Entity Managger,也就是session,在那里读取hbm,so PO和数据库的解耦程度是很高的,特别是在H3里面。
Active Record在Rails里有真正的实现。他可以执行good.save(),而不是session.save(goods);  回复  更多评论
  
# re: Domain Driving Model Design之总结与我的选择
2005-05-06 16:32 | floer
@re calvin:
不知道有哪个项目实现了 active record ?
@re 狂人思维:
不知道有哪个项目实现了 active record ?
  回复  更多评论
  
# re: Domain Driving Model Design之总结与我的选择
2005-05-10 15:34 | ShiningRay
为什么对象不能被持久化?  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 

<2005年4月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿

随笔分类(31)

随笔档案(19)

文章分类(3)

文章档案(3)

我关注的Blogs

搜索

  •  

最新评论

阅读排行榜

评论排行榜