gpt4 book ai didi

reference - DDD : Reference another aggregates child entity

转载 作者:行者123 更新时间:2023-12-04 08:45:12 28 4
gpt4 key购买 nike

我目前正在研究 DDD ,需要一些启发。

我有两个实体

  • Temple
  • TempleVariant
  • Temple(听筒)包含 基本信息(名称,描述等),并具有n个 变体,它们具有 技术描述(CAD绘图,尺寸,...)

    我的第一印象是: TempleTempleVariant形成一个集合-它们 一起属于:
    他们似乎紧密耦合
  • 如果我删除Temple,则所有TempleVariant都应被删除,就像
  • TempleVariant s如果没有 Temple(至少没有意义),就无法存在。

  • 但是随后我看到之外没有任何内容,允许聚合根引用内的实体另一个聚合。但是实际上不是Temple,而是由外部实体引用,而是由 TempleVariants 引用。

    这是否意味着在(DDD)现实中,TempleTempleVariant不同的集合,似乎只是一个集合?

    但是,如果我删除Temple怎么办?正如我所说的,TempleVariant也必须删除。但这会违反规则“一次总变更-一项交易”(或所谓的:)),因为我的“感觉”是我必须在一次交易中将其删除...

    所以我的问题是:
  • 是这两个聚合吗?
  • 如果是这样:如何处理删除?

  • g
    Warappa

    最佳答案

    领域模型中的每个类都应映射您从领域专家那里学到的无处不在的语言。顺便说一句,这看起来是一个非常有趣的领域。

    对我而言,有两种截然不同的途径来应对您的担忧。

    您应该记住,必须使用汇总才能确保业务不变。
    也就是说:他们收到更改状态的commands,并负责避免无效操作(通过适当的exceptions)。
    它们经常是实体,因为它们拥有身份。

    TempleVariant作为值对象

    如果(且仅)当需要TempleVariant的实例来处理业务规则时,它们才应成为集合的一部分。也就是说,Temple包含它们。
    但是,它们应该是不可变的对象:只有Temple可以接收更改其状态的命令(始终作为整体)。

    在这种情况下,当删除一个Temple时,所有连接的TempleVariants都将消失。尽管如此,在我开发的大多数DDD应用程序中,都没有实体被删除:它们只是被归档了。但是我已经习惯了财务应用程序和域名,可能是在您的域名中删除庙宇是正确的选择。

    TempleVariant作为DTO

    如果Temple中的任何命令都不需要任何TempleVariant来确保业务规则,则该字母可能只是有用的描述性数据,可以通过映射数据库模式的适当DTO进行处理。在这种情况下,我将定义一个基础结构服务,该服务返回指定Temple的所有变体。

    在这种情况下,您可以在DTO中公开相关Templeshared identifier,但这不是必需的。

    有关聚合设计的更多信息,强烈建议您阅读Vernon's essays on aggregate design

    关于reference - DDD : Reference another aggregates child entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16010405/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com