情况:需要生成设备,例如推土机。推土机是一个单元,由一组节点(发动机、车身、车轮等)组成。每个节点都是具有自己标识符的单独聚合。
根据 Vaughn Vernon 的《实现基于域的设计方法》一书,您应该避免在单个事务中更改多个聚合。
在这种情况下,最简单的方法是在单个事务中一次创建推土机的所有节点,然后创建推土机本身,该推土机存储指向其节点的链接。
澄清:可以在应用服务中实现的推土机生成方法的示例算法:
- 实例化电机组件
- 创建实体装配的实例
- 实例化一个车轮组件...
- 推土机的形成。
问题:这种违反 DDD 建议的行为是否可以接受?如果没有,实现这种情况的最佳方法是什么?
https://habrahabr.ru/post/316890/
所以,简单地说:
你对什么感兴趣:
那些。您不应更改其他聚合中的聚合。同样,创建应该发生在不同的事务中。
如果您无法完成推土机的构建,如果不再需要它们,您可以简单地移除已经创建的部件。
另外 - 值得记住单位的一致性。
那些。如果更改一个聚合可能会使另一个聚合无效,您需要为聚合提供一种恢复一致状态的方法。
另外,值得考虑嵌套事务。他们实际上也可以帮助你。每个嵌套聚合都在嵌套事务中创建,然后主事务保存主聚合。任何错误 - 一切都回滚。主要问题是您的 DBMS 和 ORM 是否支持此类工作。