按照DDD方法,当我有两个实体A和B,其中B的生命周期取决于A的生命周期时(我的意思是,B仅在A存在的情况下存在-例如,A表示Application,B表示<代码>D10的运行<代码>D9),我是否应该推断<代码>D11和<代码>D12属于同一个聚合,其中<代码>D13是根?
我在很多文章和书籍中读到过,他们总是说在聚合中,有一个根实体和其他元素。这些其他元素可以是其他实体或值对象。内部实体的标识对于聚合来说是本地的,因此它们只在聚合内部有意义。我应该从最后一句话(即本地身份)中解释内部实体的生命周期取决于根实体的生命周期吗?
我已经在Stackoverflow上举过两个例子,其中两个实体A和B,B的生命周期取决于A的生命周期(即B只有在A存在的情况下才存在),它们位于不同的聚合中。通常,这是因为提出问题的人有兴趣拥有两个存储库(一个用于A,另一个用于B),而在DDD之后,应该只为根聚合创建存储库。
感谢澄清这一点
发布于 2012-08-23 08:34:44
聚合的中心功能是在集群或相关实体周围创建一致性边界。这种一致性边界取决于手头的用例,甚至可以在单个用户用例中因技术需求而改变,例如性能等。
我是否应该推断A和B属于同一个聚合,其中A是根?
情况可能就是这样,但是你也可能遇到这样一种情况:Application和Instance都是聚合的,Instance通过ID引用Application,其中一个需要考虑的是最终一致性的概念。例如,是否可以删除应用程序实例,以便以最终一致的方式删除相应的应用程序实例?
我应该从最后一句话(即本地身份)中解释内部实体的生命周期取决于根实体的生命周期吗?
是。聚合应该封装它的组成实体。外部引用只能通过ID或直接引用对其他聚合进行,尽管推荐的方法是通过ID引用。
查看Effective Aggregate Design by Vaughn Vernon
https://stackoverflow.com/questions/12075800
复制相似问题