【问题标题】:What's the preferred URL to add an entity that is not an aggregate root?添加不是聚合根的实体的首选 URL 是什么?
【发布时间】:2008-12-10 15:07:18
【问题描述】:

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

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

    遵循您的领域模型。

    Orderline 对象是否存在,是否可以对它执行操作? (根据领域,不是代码中的对象,而是现实生活中的对象。)很可能不是,或者它将是聚合根。

    Order 对象存在,并且您正在向其添加 Orderline。因此,根对象是 Order,具有添加 Orderline 的操作。

    您的 URL 路由将遵循这一点,带有对象的控制器和添加 Orderline 的操作。

    根据您的示例,这是遵循该逻辑的示例:

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

    【讨论】:

      【解决方案2】:

      订单行能否独立于订单而存在?可能不会,因此,我会在订单控制器上执行操作。

      我更喜欢以下内容:

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

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

      大概,这会在成功时呈现整个订单的视图,这是将它放在订单控制器上的另一个原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-07
        • 2010-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多