【问题标题】:In ddd should all calls be routed through the aggregate root?在 ddd 中是否应该通过聚合根路由所有调用?
【发布时间】:2015-08-11 03:10:03
【问题描述】:

想要对聚合做某事的“用户/开发人员”是否应该只面对聚合根?那么,我想在聚合内部深处的实体上调用的每个方法都应该通过根“路由”吗?这将使根具有非常广泛的接口和大量无聊的代码。

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

或者我要让根给我实体(不允许从外部遍历和导航聚合)然后直接调用这个实体上的方法?

【问题讨论】:

    标签: domain-driven-design


    【解决方案1】:

    指定为聚合“根”的实体是看门人,所以所有方法调用都需要先经过他。如果您考虑一下,这是有道理的。如果你分发一个内部实体,你怎么能确定它以预期的方式使用并且不变量得到维护?此外,现在您的内部细节已经耦合,对内部结构的更改将波及整个系统。

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

    【讨论】:

    • 好答案。我不知道在哪里,但我记得读过,如果内部实体是短期使用的,可以分发内部实体(通过聚合根)。这只会耦合实体,而不是内部结构(如何获取实体)。您会说这没问题,还是您严格要求除根以外的所有实体都是不可见的和外部未知的?那么价值对象呢?我认为它们可以用作参数和返回值,对吧?
    • 是的,分发瞬态引用是完全可以的。由于值对象是不可变的,因此接受/返回它们也是完全可以接受的。实际上,它们是域的一部分,因此您在聚合上的方法应该接受大多数情况。
    • @HolgerThiemann 如果实际导航到聚合的内部实体并直接在其上调用方法而不通知根,那么该实体很可能应该是聚合根它是自己的。
    猜你喜欢
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2019-07-02
    • 2016-03-29
    • 2016-03-21
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    相关资源
    最近更新 更多