DDD中Factory和Repository的一些疑问

Hi,
各位好,最近在看Evans的DDD,很多时候有被醍醐灌顶的感觉,感觉以前的很多思考和困惑得到了回答。我现在看第二遍这本书了,仍然有一些问题,希望各位能够指教。

在Evans的定义中,Factory和Repository都是用来作为domain model中的工具来出现的,它们不是domain objects,但为domain model服务。
我的困惑是,在第六章中,Factory和Repository的职能我还是觉得有点不清晰。我看书的理解是:
1. Factory Pattern: 负责create/reconstitution域对象;
2. Repository Pattern: insert/delete/search域对象(限于aggregate的root),给client以域对象集合的感觉,从而不会把技术层面的东西暴露给域对象。

我的困惑就在于,这个factory pattern的create和Repository的insert有何区别?个人感觉是一样的,是要在Repository中insert的时候调用factory的create吗?还是我的理解出现了偏差。

同样,对于Factory的reconstitution和Repository的search的关系,也是一个调用另一个的关系吗?

请各位赐教。

不好意思,发现原来问题的答案就在第六章, "the relationship with factories"。我现在有个理解,不知道对否。
针对比如oo的数据库,由于没有O-R mapping的需要,因此factory和Repository很清晰。对于relational db,则两个pattern的权责需要明确。按照书上的意思,我的理解是
1. Factory Pattern用于从新的或已经存在的数据构建内存对象,但不涉及persistence;
2. Repository Pattern则是与persistence打交道,当需要创建内存对象的时候,委派给factory pattern。
当然,factory pattern也会在创建新的业务对象后,委派给Repository Pattern来persist这个对象到后台数据库。
总之我的理解,对于rdb的reconcile方案就是factory负责构建内存对象,repository用于与具体的persistency打交道。两者的加和就是给client以domain的感觉,而不是data container的感觉。

不知道理解的对吗?

呵呵,小弟我先说说自己的一点看法。不对之处请各位道友指点。Factory顾名思义就是生产对象的地方,工厂控制了对象生命周期的开始,而一个对象的生命周期不可能只有开始这么简单,还有中间的状态。而这些中间的状态就需要Repository来管理了。这样以来,我们还可以在Repository里采用缓存等手段来进行对象的管理。但是有个疑问,jivedon中是将缓存放到了Dao层,这点不是很理解。

>>这个factory pattern的create和Repository的insert有何区别?
create是一个从没到有的过程,就好比啤酒厂生产了一瓶啤酒一样,这个啤酒是从无到有的,而insert是改变已经存在的对象状态,也就是将其从内存转移到持久化介质中。就好比把生产好的啤酒先暂时放到库房里等待出售。

你好,其实我想弄明白的事情是factory和repository如何落地的问题。
从生命周期角度,factory是用来创建对象的,其他的生命周期由repository管理。但是,Evans的书上没有过多的例子,所以我想从代码书写角度(比如java编程)理解一下这个问题。

基本是这样,我在jiveJdon3中就是这么做的,可交流。

我觉得factory负责创建,repository负责重建或持久。
factory创建出的主对象还没有被持久过,但构成主对象的某个从对象可能已经持久过。
repository除持久作业外其它的作业都是在操纵已经持久过的对象。
两个东西创建出的对象都应该是完整的,而不是只含主对象,没有从属对象。

@freebox ---我觉得factory负责创建,repository负责重建或持久。
你的理解是错误的,工厂负责创建和重建,并对所创建实体验证不变量,并且需要对不满足不变量的情况做处理。你随便看下DDD就知道了。