【问题标题】:Should downstream object always be an Aggregate Root?下游对象是否应该始终是聚合根?
【发布时间】:2013-06-20 06:12:58
【问题描述】:

Implementing DDD,第 233 页:

有时下游上下文中的对象必须 最终与一个或多个聚合的部分状态一致 在上游上下文中。在这种情况下,我们会在 下游消费上下文,因为实体被用来维护一个 变化的连续性线索

根据作者的说法,如果需要最终一致性,那么下游对象应该始终是Aggregate Root。为什么它永远不应该被设计为一个内部实体,有什么特别的原因吗?

更新:

有人可能会争辩说,它们总是需要成为根,以防止多个下游对象(即反映上游对象状态的对象)具有相同的 id,但如果同步只是一种方式(从上游到下游上下文),则真的没有两个下游对象可以具有相同ID的情况吗?

谢谢

【问题讨论】:

  • 取决于下游系统是否使用战术模式。
  • @Yves Reynhout:聚合根和实体是战术模式。
  • 我不完全理解你的问题。老实说,我不认为下游 ID 真的那么重要。只要你能从AR记录系统中得到正确的下游对象。
  • @Eben Roux:我试图了解作者是如何得出结论的,即下游对象应该始终是根。因此,我给出了一个同步是单向的示例(从上游到下游),因为在这种情况下,尝试更新相同的上游对象。我想知道为什么即使使用单向同步下游对象也应该始终是根
  • 啊,我明白了 :) --- 好吧,阅读您的参考资料,下一行是“但我们应该尽可能避免这种建模选择。如果可以,请选择值对象来建模集成。”许多选择相互权衡,您需要选择相关且适合您的选择。一方面,我并没有真正以非黑即白的方式订阅这些东西,而是将它们用作良好的指导方针,然后提出我喜欢的东西。随着时间的推移,我对自己的选择的看法甚至可能会发生变化。

标签: domain-driven-design


【解决方案1】:

我会尝试一下。

他说的是下游有界上下文,而不是下游对象。这是这里的重要短语。

在不同的有界上下文中,您需要在该上下文中通过聚合根进行通信,因为 DDD 中一个完善的规则是所有通信都通过聚合根。您不会直接在 AR 中调用实体或值对象上的方法。

另外 - 聚合根是 DDD 中的一致性单位。正如他所说 - 如果您需要下游有界上下文中存在的对象的最终一致性,请在该下游有界上下文中设计一个聚合根(一致性边界)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 2014-01-15
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多