添加不是聚合根的实体的首选URL是什么?

时间:2008-12-10 15:07:19

标签: asp.net-mvc model-view-controller controller domain-driven-design

示例:Order对象(聚合根)具有OrderLine对象(子实体)的集合。什么是将OrderLine添加到订单?考虑使用聚合根控制器和为子实体设置单独的控制器之间的区别。

1:http://example.com/orders/add-orderline?order-id=42&product-id=12&quantity=2

2:http://example.com/order-lines/add?order-id=42&product-id=12&quantity=2

谢谢!

2 个答案:

答案 0 :(得分:1)

订单行是否可以独立于订单而存在?因此,我可能不会对订单控制器采取行动。

我更喜欢以下内容:

http://example.com/orders/addline?order-id=42&product-id=12&quantity=2

甚至addproduct如果产品只能存在于订单的一行中。

据推测,这将成为整个订单成功的视图,这是将其置于订单控制器上的另一个原因。

答案 1 :(得分:1)

关注您的域名模式。

订单项对象是否存在,是否可以采取措施? (不是代码中的对象,根据域的现实对象。)很可能不是,或者它将是聚合根。

订单对象存在,您正在向其添加订单行。因此,根对象是Order,其中包含添加Orderline的操作。

您的网址路由将遵循该路由,包含对象的控制器以及添加订单行的操作。

在你的例子中,这是遵循该逻辑的那个:

http://example.com/orders/add-orderline?order-id=42&product-id=12&quantity=2