在 ddd 中,所有调用都应该通过聚合根路由吗?

In ddd should all calls be routed through the aggregate root?

"user/developer"想对聚合做点什么的人应该只面对聚合根吗?那么我想在该聚合深处的实体上调用的每个方法都应该通过根 "routed" 吗?这将使根具有非常广泛的接口和大量无聊的代码。

或者是否允许遍历和导航聚合,选择您要处理的实体并直接在其上调用方法?

还是让root给我实体(不允许从外部遍历和导航聚合)然后直接在这个实体上调用方法?

指定为聚合的实体"root"是看门人,所以所有的方法调用都需要先经过他。如果您考虑一下,这是有道理的。如果你分发一个内部实体,你如何确定它以预期的方式使用并且不变量得到维护?此外,现在您的内部细节已耦合,并且对内部结构进行更改将在整个系统中产生连锁反应。

请记住,我们努力设计小骨料,因此如果表面积变得太大,这可能表明您的骨料边界是错误的。