许多像订单和订单行这样的例子是有道理的,比如:Order
是 AR 包含 OrderLines
Customer
是 AR 包含 Orders
.
问题是,什么是 AR 包含 Customer
?
我想它可以是“商店”之类的东西。
所以,shop.AddCustomer(customer)
...
但是,如何获得商店?
如果是 AR (实体)它有一个 id,所以 shop.GetById(shopId)
.如果我只有一家商店,这如何持久?
我应该有一张 table (商店)吗?Shop
是一个内存对象,集合为 Customers
?
最佳答案
你在那里弄错了。 聚合不包含其他聚合! 他们只能通过 ID 引用它们。
聚合是一组密切相关的实体和值对象。聚合在它们周围形成了一个一致性边界。 聚合根是该聚合中可全局寻址的根实体。所以在你的例子中 Order
和 OrderLines
, Order
确实可能是AR。Customer
另一方面,只会引用 Orders
如果是单独的聚合,则按 ID。
要检索聚合,您通常使用存储库。您可以通过指定聚合的 ID 或一些其他合适的搜索参数来通过存储库加载聚合。
关于domain-driven-design - DDD 哪个是根聚合根?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34423613/