【发布时间】:2014-05-23 10:28:19
【问题描述】:
我正在尝试对一个非常简单的域进行建模,该域具有概念上的 (one)PARENT --> (many)CHILD。问题是关系中的孩子数量可能有数百万。
我正在尝试构建一个聚合根,它允许我一次“放置”(如果不存在则更新或插入)一个孩子。但是,要更新的值必须由父级事先验证。
我可以使用哪些模式来解决这个问题?目前我考虑了以下几点:
PARENT 作为聚合根
- +验证很简单,因为子级是通过父级访问的
- -性能不佳,因为可能必须检索数百万个子项才能仅更新一个子项
- +/- 我可以进行延迟加载吗?由于一致性问题,我阅读了很多文章,认为这是 DDD 反模式
CHILD 作为聚合根
- +性能仅检索要更新的数据
- - 验证因为非平凡,父必须是根的实体,或者根必须从外部提供给父以进行验证。这两个选项都会导致问题:
- 因为更新是“put”样式,第一个选项使创建子项变得困难(如果我在存储库的 find(id) 方法中实现创建,那么我没有构建子项的必要信息,并且如果我把它放在调用存储库的服务中,那么我没有办法访问父信息,因为它不是聚合根)。
- 第二个选项会导致一致性问题,即我可以提供一个不是正在更新的孩子的父级的父级。
两者都是聚合根
- +/- 如何确保一致性,即子级由其实际父级验证?
【问题讨论】:
-
这个答案可能会帮助您做出决定:programmers.stackexchange.com/a/274404/149373
标签: validation domain-driven-design one-to-many aggregateroot