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)
哪种方法更好?我确信这纯粹是主观的,但我想看看哪个有更多的优点与缺点.
好的,基本上我的观点是你应该在 之前创建一个对象,因为:
对象的创建本身就是一个单独的问题,顺便说一句,这可能相当复杂。例如,如果OrderLine稍后将更改 的构造函数,您也需要更改Order类型。这很糟糕,因为您将需要更改仅Order因为OrderLine. 所以OrderRoot 的接口不应该依赖于OrderLine.
如果您的方法除了仅调用之外还包含一些额外的逻辑,则第二种方法可能很难测试this.OrderLines.Add(orderLine);
编辑 在与我的朋友讨论后,我得出以下意见:
Order Root 应该控制他的孩子的生命周期,因为这对于使用此 API 的其他人来说会更清楚,并且会最大限度地减少不当使用的可能性。并且也能更好地揭示意图。
使用这种方法还使我们不必担心验证传入的 OrderLine,因为如果我们负责 OrderLine 的创建,那么我们就可以正确创建它。