许多例如订单和订单行都是有道理的,例如:
Order
是AR包含OrderLines
Customer
在一个AR包含Orders
.
问题是,包含的AR是什么Customer
?我猜它可能像"商店".
所以shop.AddCustomer(customer)
......
但是,如何去商店?如果它是AR(实体),它有一个id,所以shop.GetById(shopId)
.如果我只有一个商店,这如何与持久性一起工作?
我应该有一张桌子(商店)吗?
Shop
是一个内存中的对象,有一个集合Customers
?
那你错了.聚合不包含其他聚合!他们只能通过ID引用它们.
聚合是一组密切相关的实体和值对象.聚合形成了它们周围的一致性边界.该聚合根是在骨料是全局寻址根实体.所以在你的例子中,Order
和OrderLines
,Order
确实可能是AR.
Customer
另一方面,Orders
如果它是一个单独的聚合,则只能通过ID 引用.
要检索聚合,通常使用存储库.通过指定聚合的ID或其他一些合适的搜索参数,可以通过存储库加载聚合.