【发布时间】:2016-07-21 04:29:56
【问题描述】:
根据 DDD,我们不应该从聚合边界之外引用聚合的内部成员,但是这样我将如何创建某个内部实体的对象,以便我可以使用它来创建聚合根实体的对象?
例如:
我有一个聚合根 Document 和名为 Document 的聚合根的内部成员,为了创建一个 Document 对象,我必须调用它的工厂方法,但是在创建过程中如何将 Page 与创建的 Document 关联起来文档?因为我们不能从聚合边界之外调用内部成员的工厂方法考虑我们在服务层中有以下代码, P.S:我认为这是错误的代码
var page=Page.CreatePage(param1,param2...etc);
var document=Document.CreateDocument(page);
这是错误的,因为我们不应该从聚合边界之外访问CreatePage,那么当我们想要创建聚合根实体时,如何解决这个关于如何创建聚合根的内部成员的问题?
【问题讨论】:
-
你确定 Document 是 AR 吗?文档和页面之间有什么关系?没有页面可以存在文档吗?您需要维护哪些不变量?页面是如何通过文档暴露出来的?文档还有哪些其他行为?
-
具有多页的文档 .... 就像考虑 Passport 是一个文档,它的每一页都是页面,并且关系是一对多的 ... 不变量喜欢不向文档中的文档添加页面正确的顺序……我们可能还有很多其他的行为,例如,