>们可以把业务逻辑放在实体中,而这时候的实体,我们可以理解为domain object.而让我们的session >bean和MDB只是协调实体来完成任务,只是作为实体的控制器,也就是让bean做为service
正确 ,无论EJB3.0/2.0都是这种思路,有人提出:在EJB中Domain Model设计需要失血贫血模型,因为这样可以在多个服务器之间方便传输,如果都将业务行为放入Domain Model,Model臃肿,在分布式共享下序列化Model性能会很低。所以,失血贫血模式有益处。
我不认同这种这种从分布式/SOA角度支持贫血模式的观点,我认为没有必要搞形式代码上的充血,充血模式一个大概念,它可以包含很多代码类的实现,而且从OO设计原则来说,我们也不可能让所有业务行为都充到一个Model中去,我们必须通过设计模式来对这个臃肿的Model进行分解细分,比如桥模式。这里也反应分析和设计确实存在一些难以逾越的鸿沟。
有人看到JiveJdon3中FourmMessage只有set/get,就认为是贫血的,这就很片面,不能教条主义看待失血和充血,JiveJdon3的ForumMessage粗看上去是失血,只有set/get,没有业务逻辑,但是看看其子包下MessagRender就发现业务行为不少,这些都是从FourmMessage中分离出来的,是细节设计考虑,当然如果为了面对形式上充血,我完全可以将MessageRender功能都并入ForumMessage,那谁能看得懂ForumMessage呢?OO宗旨又跑到哪里了呢?再说Evans DDD最终必须结合设计模式的。
通过我这样的思路,我们的Domain Model又是充血的丰富的,完整的,又能够在分布式系统/SOA中快速序列化奔跑,这就是裸奔,裸奔有理,体现我们OO分离细分原则。
[该贴被banq于2008-06-14 10:05修改过]