DDD 聚合为 public api

DDD aggregates as a public api

对于应该如何考虑我的域聚合根,我有点困惑。基本上,在我看来,它们是供客户使用的 public api,它隐藏了聚合根子项的实现。

例如,如果 Foo 是聚合根而 Bar 是子实体。如果我想让聚合执行某种 Bar 参与的操作,那么可以调用类似于以下的方法:

(inside foo class)
void SomeBarThing()
{
  this.Bar.DoTheBarThing()
}

基本上就这些了?客户端只知道并关心聚合根,因为它的功能类似于 GOF 外观模式?

that's basically it?

是也不是。

是的,关于信息隐藏,你基本上是对的。应用程序只知道根实体的接口,根实体决定自己做哪些工作以及将哪些工作委托给同一聚合中的其他实体。

Im a bit confused as to how I should be thinking of my domain aggregate roots.

埃文斯 2003 年的书在这方面有些帮助。 ENTITY 是一种领域建模模式(第 5 章);聚合是一种生命周期管理模式(第 6 章)。

基本思想:聚合是对域的某些部分建模的实体图。

但在 Evans 的公式中,聚合没有自己的接口。相反,图中的实体之一被“提升”为根对象,所有信息都发送到该对象。