DDD中的重构工厂与存储库之间是什么关系?

bck*_*rld 4 domain-driven-design

根据Evans的说法,在DDD中,我们有两种类型的工厂,一种用于创建对象,另一种用于重构存储的对象。

a)虽然Creation factories可以按聚合根的形式存在Standalone Factory objects或按Factory methods定义Reconstitution Factories存在,但应仅以Standalone Factory objects?形式存在?

b)我假设Reconstitution Factories应该仅由存储库使用/调用,这会将对象创建委托给它们?

c)即使它们仅由存储库使用,也应该Reconstitution Factories在中定义domain layer

更新:

我的问题本质上只是理论上的,因为我才开始学习DDD

我假设您的对象保留在RDBMS中而不是oo db中。

是的,它们保留在关系数据库中

我认为它们是从数据库到域对象的简单数据转换(从结果集中获取字段并将其放在对象中,而无需任何验证或其他逻辑)

a)如果我正确理解您的意思,您是说,即使创建特定的对象足够复杂,无法为其使用creation factory对象,在大多数情况下,对同一对象的重构也不会像其创建那样复杂,因此不需要reconstitution factory

b)您为什么要进行重构而不是创建那么复杂,是基于以下假设:存储在数据库中的对象已经处于有效状态?

数据映射对象应该在不同的层中。数据映射层对于域应该是未知的

我同意

C)

我将“重构工厂”视为数据映射器,它们应位于域之外。

但是根据Evans所说,工厂(我假设他是指创建工厂和重组工厂)正在处理领域概念(即,他们必须了解他们要创建/重新构造的实体或聚合的内部结构的某些知识),因此是域的一部分(即使它们不代表任何域概念),而数据映射器也不是域的一部分,也不了解对象的内部结构?

谢谢

Geo*_* C. 6

我假设您的对象保留在RDBMS中而不是oo db中。

重建应该一直处于有效状态的已持久存储对象并不复杂。我将它们视为从DB到域对象的简单数据转换(从结果集中获取字段并将其放在对象中,而无需任何验证或其他逻辑)。为了简单起见,我认为,存储库中基于结果集重建对象的方法足以保持存储库的高度凝聚力。

如果您真的想采用重组工厂的方式(并且您的域足够复杂以至于需要此类对象),也许您需要一个合适的ORM框架。数据映射对象应该在不同的层中。数据映射层对于域应该是未知的。来自Martin Fowler的网站:“ 存储库还支持在域和数据映射层之间实现清晰的分隔和单向依赖的目标。” ,连结

我将“重构工厂”视为数据映射器,它们应位于域之外。