微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

域驱动设计 – DDD建模,聚合根之间的交互

用1; 2; 3标记我的聚合根.看起来很不错 – 几乎像葡萄.

我不喜欢的是一个用红色箭头标记的实体.

让我们想象一下:

> AR#1是公司
> AR#2是办公室
> AR#3是员工
>标有红色箭头的实体名为Country

>公司制定雇用员工的国家/地区的规则(招聘,公司.国家/地区.公司(雇员.国家/地区)必须为真)

我以某种方式看到这个域中非常不重要的部分(也许它听起来不像这个例子中的那个),我想避免促使Country聚合root.

关于聚合根的Glossary说:

Transient references to the internal members can be passed out for use within a single operation only.

那么 – 是否会引入类似“EmployeeCountry”的内容,删除对公司Country的引用,并检查Employee国家/地区是否与招聘操作中的任何公司国家匹配听起来合理?

还有其他想法吗?

我怎样才能让我的葡萄看起来像他们应该的样子?

解决方法

在这种情况下,Country只是一个值对象,而不是一个实体 – 更不用说是一个聚合根 – 所以没有理由改变你的设计(没有更多的信息).

另外,请注意您引用的警告属于聚合根的内部成员,而不是聚合本身.在多个位置维护对聚合的引用没有任何问题.聚合根应该封装子对象,以便有一个地方可以为相关对象强制执行业务规则.

你可以在埃文斯的“领域驱动设计”(a.k.a.,“The Blue Book”)中的几个地方清楚地看到这一点.例如,请参见第127页的图(在聚合根的介绍中),该图显示一个Car聚合,它引用了Engine聚合.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐