2011-01-24 51 views
6

这是一个更好的办法,首先创建的子实体,然后传递到聚合根添加它们,或者有聚合根创建它们?例如:将子实体添加到聚合根的建议方法是什么?

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

或者

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

这是一个更好的办法?我敢肯定,这纯粹是主观的,但我想看看哪个有更多的优点vs缺点。

+0

为什么他们相互排斥? – 2011-01-24 19:53:49

回答

4

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

  • 对象的创建本身就是一个独立的关注,它可以是一个相当的方式复杂。如果,例如,OrderLine的构造将在以后改变,你需要改变Order类型了。这是不好的,因为你将需要更改Order只是因为在OrderLine一些变化。所以Order根的接口不应该依赖于OrderLine

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

编辑 和我的一个朋友讨论之后,我来到了意见如下:

  • 排序根应该控制他的孩子的生命期,因为这会更清楚地为其他人使用这个API和wi将最大限度地减少使用不当的可能性。而且还会更好地揭示意图。

  • 使用这种方法也让我们不要担心验证输入的订单行,因为如果我们有责任OrderLine的创造,然后我们就可以正确地创建它。

+1

现在,这是有用的东西。从未注意到耦合。 – 2011-01-24 21:21:19

相关问题