【发布时间】:2014-01-07 18:39:23
【问题描述】:
根据 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) 你为什么重构不如创建复杂的推理是基于存储在 DB 中的对象已经处于有效状态的假设?
数据映射对象应该在不同的层。数据映射 层应该是域未知的
我同意
c)
我认为“重组工厂”是数据映射器,它们应该 驻留在域外。
但根据 Evans 的说法,工厂(我假设他的意思是创建工厂和重构工厂)正在处理领域概念(即,他们必须了解他们试图创建/重构的实体或聚合的内部结构)因此是领域的一部分(即使它们不代表任何领域概念),而数据映射器不是领域的一部分,也不知道对象的内部结构?!
谢谢
【问题讨论】: