1

遵循 DDD 方法,当我有两个实体A并且BwhereB的生命周期取决于A生命周期时(我的意思是B仅在存在时才A存在 - 例如A表示 anApplication并表示anB的运行),我应该推断出它并属于同一个聚合根在哪里?InstanceApplicationABA

我读过很多文章和书籍,他们总是说在聚合内部,有一个根实体和其他元素。这些其他元素可能是其他实体或值对象。内部实体的身份对于聚合是本地的,因此它们仅在聚合内部才有意义。我应该从最后一句话(即本地身份)中解释内部实体的生命周期取决于根实体之一吗?

我已经举例说明了Stackoverflow,其中两个实体ABB生命周期取决于A的生命周期(即B仅在存在时才A存在),它们位于不同的聚合中。通常,这是因为提出问题的人有兴趣拥有两个存储库(一个用于A,另一个用于B),而在遵循 DDD 时,应仅为根聚合创建存储库。

感谢澄清这一点

4

1 回答 1

2

聚合的中心功能是围绕集群或相关实体创建一致性边界。这种一致性边界取决于手头的用例,甚至可能由于技术要求(例如性能等)而在单个用例内发生变化。

我应该推断出 A 和 B 属于同一个聚合,其中 A 是根吗?

情况可能是这样,但是您也可以有一个情况,其中Application和都是通过 IDInstance聚合和Instance引用。Application要考虑的一个是最终一致性的概念。例如,是否可以删除一个应用程序实例,从而以最终一致的方式删除相应的应用程序实例?

我应该从最后一句话(即本地身份)中解释内部实体的生命周期取决于根实体之一吗?

是的。聚合应封装其组成实体。外部引用只能通过 ID 或直接引用对其他聚合进行,但推荐的方法是通过 ID 引用。

查看Vaughn Vernon 的有效聚合设计

于 2012-08-23T00:34:44.273 回答