有一条来自https://martinfowler.com/bliki/DDD_Aggregate.html的声明:
聚合将有其组件对象之一是聚合根。来自聚合外部的任何引用都应该只指向聚合根目录。因此,根可以确保聚合作为一个整体的完整性。
我有什么订单,有项目,这些项目可能会支付不同的付款。
应该将支付实体包括在订单集合中,因为否则它实际上应该有一个指向内部订单项目的链接,而不是整个订单?我不太了解这个聚合规则,以及它应该如何在这种情况下应用。
我的问题是:在这种情况下,可能存在哪些集合,是否可以有单独的OrderAggregate,并且可以说是持有支付实体的其他集合?
发布于 2019-06-08 09:57:53
在DDD中,约定的Root对象或ARs应该将对您需要在业务逻辑中进行的计算具有重要意义的所有数据组合在一起。
因此,在您的顺序和项目的例子。如果您需要通过将每个项目的权重相加来计算订单的运输成本,那么您应该有Order.Items,它包含订单中的所有项目。
如果任何单个项目发生更改,则总体顺序将发生更改。因此,它们都应该作为一件事情一起处理。
显然,这里有一个危险,因为我可以有一个商业规则。企业价值是其所有客户、订单、物品、价格减去所有员工、年数、月份、工资的总和。
如果您尝试将所有内容放在一个聚合根中,那么它就无法工作。
如果两个程序同时更改相同的AR,则有一个问题。有效的合并需要完成。
如果你不能在记忆中保存整个AR,那么你必须买一台更昂贵的电脑。
您的ARs越大,这些问题就越多。
https://softwareengineering.stackexchange.com/questions/393046
复制相似问题