我正在尝试建模一个非常简单的域,它具有概念(一个)PARENT – (许多)子.问题在于关系中的孩子数量可能达到数百万. 我正在尝试构建一个聚合根,它允许我一次“放”(更新或插入,如果不存
我正在尝试构建一个聚合根,它允许我一次“放”(更新或插入,如果不存在)一个孩子.但是,更新的值必须事先由父级验证.
我可以用什么模式来解决这个问题?目前我考虑过以下几点:
PARENT作为聚合根
>验证很简单,因为通过父级访问子级
> – 尽管可能需要检索数百万个孩子才能更新一个孩子
> / – 我可以延迟加载吗?由于一致性问题,我读了很多篇文章,认为这是DDD反模式
CHILD作为聚合根
> Performant仅检索要更新的数据
> -Validation因为非常重要,要么父对象必须是root的实体,要么root必须在外部提供父进行验证.这两个选项都会导致问
>因为更新是“put”样式,第一个选项会使子项的创建变得困难(如果我在存储库的find(id)方法中实现创建,那么我没有构建子项的必要信息,如果我把它放在调用存储库的服务中然后我没有办法访问父信息,因为它不是聚合根.
>第二个选项会导致一致性问题,即我可以提供不是正在更新的子级的父级的父级.
两者都是聚合根
> / – 如何确保一致性,即孩子是否由其实际父母验证?
您还没有理解聚合根(AR)是什么.它不是儿童的父容器.它的概念应该按照定义来处理.一对多与识别AR无关.“子”是在AR上下文中存在的有意义的概念,即它是由AR表示的聚合的一部分.您的示例似乎定义了一个存储库,一个项目容器.它看起来有点像CRUD功能.
您确定自己处于聚合状态而不是在简单服务足够的环境中吗?