添加子实体以聚合根的推荐方法是什么?

时间:2011-01-24 19:50:34

标签: domain-driven-design factory-pattern aggregateroot

哪种方法更好,首先创建子实体,然后传递给聚合根添加它们,或者让聚合根创建它们?例如:

Order.AddOrderLine(new OrderLine(product, quantity, ...));

或者

Order.AddOrderLine(product, quanity, ...);

哪种方法更好?我确信这纯粹是主观的,但我想看看哪个有更多的优点与缺点。

1 个答案:

答案 0 :(得分:4)

好的,基本上我的意见是你应该在之前创建一个对象,因为:

  • 创建对象本身就是一个单独的问题,顺便说一句,它可能相当复杂。例如,如果稍后将更改OrderLine的构造函数,则还需要更改Order类型。这很糟糕,因为Order中的某些更改,您只需要更改OrderLine。因此,Order Root的界面不应取决于OrderLine

  • 第二种方法可能很难测试,如果你的方法只包含一些额外的逻辑,只需要调用this.OrderLines.Add(orderLine);

修改 在与我的一位朋友讨论之后,我提出了以下意见:

  • 订单Root应控制其孩子的生命周期,因为对于使用此API的其他人来说,这将更加明确,并将最大限度地减少使用不当的可能性。并且还会更好地揭示意图。

  • 使用这种方法还可以让我们不用担心验证传入的OrderLine,因为如果我们负责OrderLine的创建,那么我们就可以正确创建它。