【发布时间】:2021-05-01 17:25:14
【问题描述】:
我还是 DDD 的新手。在域模型中,我有一个 Component 的聚合,它可以由子组件组成,也可以是另一个父 Component 的子组件。换句话说,我有一个组件层次结构。
需要两个操作:AddSubComponent() 和 AddToParent()。在执行这两个动作时,如何强制执行层次结构中不存在循环的不变量?是否应该通过域事件强制执行?或者只是在聚合中引用父级和子级,然后在聚合本身内递归检查嵌套组件是否会创建循环?
注意:我使用 C# 并使用 EF Core 持久化域模型。
编辑 我通过将每个组件视为一个集合来解决这个问题。每个都有对其父母和孩子的引用。
AddSubComponent(Component c)
检查c 是否已经是子组件,并在检查组件的父级和c 的子级后返回或仅添加c 作为子组件。然后触发由应用层处理的域事件,以验证整个图不包含循环,并调用c.AddToParent()
AddToParent(Component c)
执行与上述操作相同的逻辑,但仅添加到父级并触发在应用程序层处理的域事件,也仅调用parent.AddSubComponent()。
这种调用任何方法的方式将确保仅针对聚合的原子一致性,而整个层次结构的最终一致性由应用程序层确保。此外,上述所有这些操作都包含在事务中。所以。最终只保留有效的层次结构。
【问题讨论】: