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

Jas*_*son 6 domain-driven-design aggregateroot factory-pattern

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

Order.AddOrderLine(new OrderLine(product, quantity, ...));
Run Code Online (Sandbox Code Playgroud)

要么

Order.AddOrderLine(product, quanity, ...);
Run Code Online (Sandbox Code Playgroud)

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

Res*_*uta 4

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

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

  • 如果您的方法除了仅调用之外还包含一些额外的逻辑,则第二种方法可能很难测试this.OrderLines.Add(orderLine);

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

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

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