哪种方法更好,首先创建子实体,然后传递给聚合根添加它们,或者让聚合根创建它们?例如:
Order.AddOrderLine(new OrderLine(product, quantity, ...));
或者
Order.AddOrderLine(product, quanity, ...);
哪种方法更好?我确信这纯粹是主观的,但我想看看哪个有更多的优点与缺点。
答案 0 :(得分:4)
好的,基本上我的意见是你应该在之前创建一个对象,因为:
创建对象本身就是一个单独的问题,顺便说一句,它可能相当复杂。例如,如果稍后将更改OrderLine
的构造函数,则还需要更改Order
类型。这很糟糕,因为Order
中的某些更改,您只需要更改OrderLine
。因此,Order
Root的界面不应取决于OrderLine
。
第二种方法可能很难测试,如果你的方法只包含一些额外的逻辑,只需要调用this.OrderLines.Add(orderLine);
修改强> 在与我的一位朋友讨论之后,我提出了以下意见:
订单Root应控制其孩子的生命周期,因为对于使用此API的其他人来说,这将更加明确,并将最大限度地减少使用不当的可能性。并且还会更好地揭示意图。
使用这种方法还可以让我们不用担心验证传入的OrderLine,因为如果我们负责OrderLine的创建,那么我们就可以正确创建它。