【问题标题】:Domain entity with dynamic parent entity具有动态父实体的域实体
【发布时间】:2013-04-17 11:01:54
【问题描述】:

EntityA 是一个聚合根,有许多 EntityB 实体。 EntityB 有许多 EntityC 实体。 EntityC 正在同时引用 EntityB(原始父级)和 EntityA(创建 EntityC 时为 null)。

在某一时刻,我想将 EntityA 设置为 EntityC 的“新父级”,因此在 EntityC 中,我将对原始 EntityB 父级的引用设置为 null,并将对 EntityA 的引用设置为(之前为 null)。

这种“动态实体父”的想法与 DDD 兼容吗?

【问题讨论】:

  • 业务流程需要这个吗?
  • 不是真的,我个人不喜欢它,我会以不同的方式做。我们只是在讨论是否在 DDD 中做正确的事情。我不认为这是一个正确的想法。但我很高兴被说服。
  • 如果不需要它就不要这样做:) 看起来很丑。 DDD 的美妙之处在于领域驱动建模,因此您不必仅仅因为它在未来可能有用或任何设计模式所说的东西就想出东西

标签: domain-driven-design


【解决方案1】:

设计聚合时的核心考虑因素之一是将其视为一致性边界。所以当你考虑是否应该表达组成实体之间的各种关系时,考虑这些关系是否需要实现行为,以及它们是否需要在执行所述行为后保持一致。 DDD 并没有规定对象模型本身的实现,而是规定了对行为和事务一致性的关注。也很多时候,实现关系以支持查询场景。在这些情况下,不要污染聚合,而是创建一个单独的read-model。另外,看看effective aggregate design

【讨论】:

    【解决方案2】:

    您的想法绝对与 DDD 兼容。但是,如何实施它很重要。

    正如 eulerfx 所指出的,这里的聚合设计是相关的。不过,我确实怀疑您可能有某种形式的分类结构。这意味着该结构的表示可能成为一组新的实体/聚合。或者,如果不是一个完整的子域,那么可能有实体中的值对象表示的分类。但是,如果您发现自己处于该位置,则在聚合中引用其他聚合有点危险。

    【讨论】:

    • 基本上EntityA是一个Item,EntityB是一个ItemVersion,EntityC是SomethingBelongingToItemVersion。所以,item数据是版本化的,一次操作之后SomethingBelongingToItemVersion不能再版本化,会直接固定在Item上,表示不再版本化
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 2012-06-30
    • 2012-03-12
    • 2021-06-14
    • 1970-01-01
    • 2011-12-19
    相关资源
    最近更新 更多