【发布时间】:2021-09-11 20:30:08
【问题描述】:
我的个人项目有问题。
我有项目,它有阶段,阶段有任务。起初,我试图在该聚合中创建 Project 和 AggregateRoot 以及 Stage 和 Tasks 实体。由于还有其他实体,例如 Costs、Installments、FinancialData 以及许多其他实体,Project 已经开始成长为神级,所以我重新考虑了所有实体,并将 Project、Stage 和 Task 分开了 AggregateRoot。
所以我已经开始重构它,一切都很好,但是我在一个功能上遇到了问题。状态系统。有时,Task 状态的更改会启动 Stage 和 Project 状态的一系列更改(例如,将新 Task 添加到 finished Stage 应该将该阶段置于 in progress em> 状态,然后如果项目处于 已完成 状态,也应移动到 进行中)。这是我的问题。如何处理? 到目前为止,我正在做的事情是从存储库中加载项目,这是应用程序服务中标记为 @Transactional 的第一个操作,并在所有操作后保存在该方法的末尾。
在重构之后,有时我需要在一个事务中更改三个 AggregateRoot。如果那应该是一个 Aggregate,那么 Project 将返回状态,此时它有大量方法来处理阶段和任务上的所有更改。我有点迷路了。
是否应该在操作的最开始加载所有三个,将它们传递到操作链中,并在方法调用结束时保存在每个存储库上?
【问题讨论】:
标签: domain-driven-design ddd-repositories