uri*_*ium 3 domain-driven-design aggregateroot repository-pattern
我们的系统中有一个聚合根,并且在集合中有子实体.问题是容器需要在事务的基础上非常频繁地更新,并且子实体不需要更新,它们实际上几乎不会改变,它们在性质上更像是配置.
我的第一反应是将它们分成两个不同的聚合根,因为我们的应用要求.但是我被提醒了级联删除规则,如果我们删除那个,则删除应该级联,所以它们的生命周期是链接的.
当我们发现存在缓存问题时,我们偶然发现了这个问题.子系统实体(配置)的更改未在运行时在系统中反映,因为父级不知道这些更改(我们将它们作为一个聚合根,但有人为其子级创建了一个存储库).
聚合边界的主要驱动因素是域的不变量 - 或者换句话说,聚合边界应该是一致性边界.必须以原子方式一起改变的事物必须在同一个聚合中.
级联删除是(关于聚合边界)而不是规则的好处.你总是可以Parent通过在你加载Child实体的地方要求一个仍然存在的事实来强制执行.使用此设计,您可以制作Parent和使用Child不同的聚合,同时仍然执行Child不能请求"自由浮动" 聚合的规则.如果您有域事件,则删除Child聚合以响应已删除的Parent内容很容易.
注意:所有这些都假设您的域不变量允许首先分离聚合.