Marked my aggregate roots with 1;2;3. Looks quite nice - almost like grapes.
我不喜欢的是一个标有红色箭头的实体。
让我们想象一下:
- AR #1 是公司
- AR #2 是办公室
- AR #3 是员工
- Entity marked with red arrow is named
Country
- 公司制定从哪些国家雇用员工的规则(关于雇用、
company.Countries.Contains(employee.Country)
一定是真的)
我以某种方式看到域的这个非常不重要的部分(也许听起来不像这个示例中的那样),并且我想避免将 Country 提升为聚合根。
Glossary http://domaindrivendesign.org/node/88关于聚合根 说道:
对内部成员的临时引用只能传递出去以供在单个操作中使用。
那么,引入“员工国家/地区”之类的内容、删除对公司国家/地区的引用并检查员工国家/地区是否与招聘操作中的任何公司国家/地区相匹配,听起来合理吗?
还有其他想法吗?
我怎样才能让我的葡萄看起来像应有的样子?
在此背景下Country
只是一个值对象,而不是一个实体 - 更不用说聚合根 - 因此没有理由更改您的设计的任何内容(没有更多信息)。
此外,请注意,您引用的警告涉及聚合根的内部成员,而不是聚合本身。在多个地方维护对聚合的引用并没有什么问题。聚合根应该封装子对象,以便有一个地方可以为相关对象强制执行业务规则。
您可以在埃文斯的“领域驱动设计”(又名“蓝皮书 http://domaindrivendesign.org/books”)。例如,请参阅第 127 页上的图表(在聚合根的介绍中),该图显示了具有对 Engine 聚合的引用的 Car 聚合。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)