cnbond
2008-12-09 12:03
DDD主要针对领域模型.和架构分层不是一会事.

领域模型中的各种角色一定要分清楚

1.实体--有唯一的标识,并且要有属性和行为(非GET/SET),添加加了行为,使其具有生命力.往往在设计时,实体的形力最难决断.为确定形为,我们必须识别它们的责任和协作.类的责任是指该类要做,知道或决定的一切,由一个或多个方法完成.类中有属性和关联,协作就是为完成自己的责任所调用其它关联类.

2.值对象--没有标识没有行为.如Address类

3.工厂---定义创建实体的方法,封装实例化对象并将一些关联对象注入.

4.仓库(repository)管理实体的集合,主要有查找和删除实体的方法.实现类可以调用执久化层(如Hibernate,Ibatis)

5.服务(Service),它实现整个应用程序的工作流(workflow).服务包含那些无法指派单个实体的形为,由作用多个对象方法组成.如可以调用repository查找到实体对象,然后委派给这些对象.服务和facade很像,但不一样,它不处理以下事情.a执行事务b.收集返回给表现层的数据,c脱钩对象d其它事情.服务可以说是业务的协调者,业务逻辑可以分散到实体对象中.

以上是简短说明.还有现在图书概念混杂,一定要选会书看,还要在平时工作是应用DDD,不要光说不练.现在环境很尴尬,虽然天天说DDD,但是一到工作中,就忘记了.很悲哀.

spring7777777
2008-12-09 16:50

这里有个图,讨论下对不对。

【【【【再次请求:可不可以举个例子,说说具体的一些方案例子,怎么分层?

一起学习


xmuzyu
2008-12-10 00:38
LS兄弟的图和我的想法一致的,我目前也是采用这种方法。

freebox
2008-12-10 10:47
图里面好像少了工厂这个概念。

如果包含对象关联,对象工厂就不再是简单的new操作符了,工厂应该被显示的提及。

就算没有对象关联,只要包含领域逻辑,比如创建账号的时候不允许用一批不良词汇,这个规则是谁在处理呢?我认为应该交给工厂处理,工厂应该持有一个(批)规则的接口,不满足规则的应该掷出一个领域异常,表示对象没办法创建及原因,如果规则扔进new里,显然变更规则时候要更改对象本身的定义,还不如放进专有的工厂里处理,尽管初期没有这许多规则,我仍然倾向为重要的实体创建工厂对象。

banq
2008-12-10 11:16
>图里面好像少了工厂这个概念

非常正确,没有Factory的领域设计是假的,工厂负责对象的创建,控制对象的生命周期,何等重要,它可谓是对象编程和数据库编程的本质区别象征。我在JiveJdon3中专门用Builder模式来做工厂,花费的力气也最多。

猜你喜欢