加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 程序设计 > 正文

DDD:引用另一个聚合子实体

发布时间:2020-05-23 19:13:04 所属栏目:程序设计 来源:互联网
导读:我目前正在深入研究DDD,需要一点点启发. 我有两个实体 寺庙 TempleVariant Temple(耳机)包含基本信息(名称,描述,……),并且有n个变体,其中包含技术说明(CAD绘图,尺寸,…) 我的第一印象是: Temple和TempleVariant形成一个聚合 – 它们属于一起: 它们看起来非

我目前正在深入研究DDD,需要一点点启发.

我有两个实体

>寺庙
> TempleVariant

Temple(耳机)包含基本信息(名称,描述,……),并且有n个变体,其中包含技术说明(CAD绘图,尺寸,…)

我的第一印象是:
Temple和TempleVariant形成一个聚合 – 它们属于一起:
它们看起来非常紧密

>如果我删除一个Temple,所有TempleVariants都应该删除
>如果没有Temple,TempleVariants就不存在(至少没有意义)

但后来我读到,聚合根之外的任何内容都不允许引用另一个聚合内的实体.但实际上并不是Temple被外部实体引用,而是TempleVariants.

这是否意味着在(DDD)现实中Temple和TempleVariant是不同的聚合体,它们似乎只是一个聚合体?

但是,如果我删除Temple怎么办?正如我所说,TempleVariants也必须删除.但那会违反规则“一次聚合 – 改变 – 一次交易”(或者所谓的:),因为我的“感觉”是我必须在一次交易中删除它们……

所以我的问题是:

>那两个聚合体?
>如果是这样:如何处理删除?

LG
warappa

域模型中的每个类都应该映射您从领域专家那里学到的无处不在的语言.这看起来很有意思,顺便说一句.

对我来说,有两种不同的方法来应对你的担忧.

您应该记住,需要聚合来确保业务不变量.
那就是:他们收到commands改变他们的状态,他们有责任避免无效操作(通过适当的exceptions).
它们通常是实体,因为它们具有身份.

TempleVariants作为价值对象

如果(且仅当)TempleVariant的实例需要处理业务规则,它们应该是聚合的一部分.也就是说,圣殿包含它们.
但是它们应该是不可变的对象:只有Temple可以接收改变其状态的命令(总是作为一个整体).

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

TempleVariants作为DTO

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

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

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

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读