【发布时间】:2011-02-13 18:20:18
【问题描述】:
关于领域驱动设计,Order 和 OrderLines 始终被视为一个集合,其中 Order 是根。通常,一旦创建订单,就无法更改它。然而,就我而言,这是可能的。相反,每个订单都有一个状态来确定订单是否可以更改。
在这种情况下,Order 和 OrderLines 都是它们自己的“聚合根”吗?我需要能够更新订单行,所以我认为他们应该有自己的存储库。但我不想检索订单行,并在没有订单的情况下保留它们。所以这表明仍然存在一个聚合,其中 Order 是根,具有创建订单行的工厂方法(Order.CreateOrderLine(quantity, text, ...)。
另一种方法是在修改订单行集合时更新订单,然后调用 UpdateOrder(Order)。我需要某种方法来检测应该只更新集合,而不是 Order 本身(使用实体框架)。 你怎么看?
【问题讨论】:
-
您为什么不想更改订单?只有发票不能修改。
-
很多情况下您不想更改订单。如果它已被客户确认等。如果订单行是订单聚合中的实体并且没有自己的存储库,您将如何更新订单行?
标签: domain-driven-design aggregate aggregateroot