7

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

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

或者

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

哪种方法更好?我敢肯定这纯粹是主观的,但我想看看哪个有更多的利弊。

4

1 回答 1

4

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

  • 创建对象本身就是一个单独的问题,顺便说一下,这可能是一个相当复杂的问题。例如,如果OrderLine稍后将更改的构造函数,您也需要更改Order类型。这很糟糕,因为您Order只需要更改OrderLine. 所以OrderRoot 的接口不应该依赖于OrderLine.

  • 第二种方法可能很难测试你的方法是否包含一些额外的逻辑除了只调用this.OrderLines.Add(orderLine);

编辑 与我的朋友讨论后,我提出了以下意见:

  • Order Root 应该控制他孩子的生命周期,因为这对于使用这个 API 的其他人来说会更清楚,并且会最大限度地减少不当使用的可能性。也将更好地揭示意图。

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

于 2011-01-24T21:16:06.607 回答