【问题标题】:Where is the proper place to put domain logic to update a child of an aggregate root?放置域逻辑以更新聚合根的子级的合适位置在哪里?
【发布时间】:2011-01-24 19:03:22
【问题描述】:

最佳实践是直接更新聚合根的子节点,还是仅通过聚合根更新?例如,哪个是首选:

Order.UpdateOrderLineQuantity(orderLine, quantity);

Order.OrderLines[0].UpdateQuantity(quantity);

我们将不胜感激该部门的任何指导。

【问题讨论】:

    标签: domain-driven-design aggregateroot aggregates


    【解决方案1】:

    聚合根是封装相关子对象的对象,因此您应该使用第一种技术。

    就像调用者不应该关心订单 ID 是存储为整数还是字节数组一样,他们也不应该关心或知道它是使用 OrderLines 还是 HideousLegacyObjects 来存储和操作订单详细信息。

    【讨论】:

    • 这对添加有意义,但我主要关注已经是订单一部分的行。让订单处理更新会更好吗?
    • 啊,我误解了这个例子,但这并没有改变我回答的要点:订单仍然应该处理更新。
    • 这最终可能会污染 AR API,AR 需要公开其每个实体的行为,这可以接受吗?
    • @Sudarshan,这不仅仅是可以接受的,它实际上是聚合根的全部要点。如果您发现您有太多操作,您可能需要考虑将聚合划分为多个有界上下文。
    猜你喜欢
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2011-09-08
    相关资源
    最近更新 更多