DDD项目中都是以失血模型存在着?

07-12-10 fico07
         

这如何理解?DDD我觉得很是能自圆其说的一种设计思想.一直想把的什么失血和贫血,BO,VO,POJO,还有怎么分层跟DDD作一个整合.一些基层框架可以DDD提供服务,比如ibatis,我觉得这些东西如果放在DDD这么一个环境下能很好的解释. 但现在总感觉没突破这一层.

         

banq
2007-12-11 10:11

在DDD项目中,模型分三种:实体 值对象和服务,这三种组成一个完整丰富的充血模型,如果你只看到这三种之一元素:实体,发现实体只有setter/getter,就误认为这是一个失血或贫血模型,那么未免有点盲人摸象的味道。

以案例来说明吧:在JiveJdon3源码中,ForumMessage是一个实体,但它只是领域模型的一个元素,为了实现ForumMessage输出过滤功能,我创建了一个ForumMessageRender模型,其实是ForumMessage的Proxy,ForumMessageRender模型也属于领域模型一种,在其中我们实现了论坛业务复杂功能:输出过滤,如果你把这个功能放在ForumMessageService这个服务中实现,那么无疑你就范了MartinFowler反对的那种将模型变成失血,业务放在Service中实现的问题。

为什么我们总是在失血和贫血,BO,VO,POJO等概念上纠缠不清?因为这些都是不同高度层次的问题,但是程序员把它们当作同一个层次问题,那么当然得不出因果,就象鸡和蛋问题,如果你将鸡和蛋看成同一个层次,是鸡生蛋,还是蛋生鸡,没有结果,但是如果上帝告诉你,鸡比蛋高一个层次,问题就解决,同样,失血或充血模型比POJO/BO/VO等高一个层次,是从需求中直接来的,那么你就不会抓住一个POJO在微观世界反复研究它是失血还是充血,因为这个POJO只是一个结果。

相关讨论:

http://www.jdon.com/jivejdon/forum/messageList.shtml?thread=31369

testoktest
2009-08-06 17:34

ForumMessageRender 是ForumMessage的Proxy??

第一次建模,就产生了 代理类……

第一次建模,就发现没有 基本业务可以直接写在实体里面,一定要用代理类,也太狠了点

ITfuture
2009-10-09 17:03

为什么我们总是在失血和贫血,BO,VO,POJO等概念上纠缠不清?因为这些都是不同高度层次的问题

这句话我认为很正确.

论坛业务和MODEL分离.派生出的PROXY来处理业务...

目前我在项目中也有一点关于PROXY类的使用心得.和这个类似..

WebService生成客户端对象.通过类A来进行报文发送通信等活动.那么他对外接口是A INTERFACE。我现在建立了PROXY类.PROXY类继承A INTERFACE.对内将类A的实例委托给PROXY。那么我在PORXY类中就可以进行开关控制.