当前位置 : 主页 > 手机开发 > 其它 >

验证 – 域驱动设计:如何处理概念上较大的聚合根?

来源:互联网 收集:自由互联 发布时间:2021-06-22
我正在尝试建模一个非常简单的域,它具有概念(一个)PARENT – (许多)子.问题在于关系中的孩子数量可能达到数百万. 我正在尝试构建一个聚合根,它允许我一次“放”(更新或插入,如果不存
我正在尝试建模一个非常简单的域,它具有概念(一个)PARENT – > (许多)子.问题在于关系中的孩子数量可能达到数百万.

我正在尝试构建一个聚合根,它允许我一次“放”(更新或插入,如果不存在)一个孩子.但是,更新的值必须事先由父级验证.

我可以用什么模式来解决这个问题?目前我考虑过以下几点:

PARENT作为聚合根

>验证很简单,因为通过父级访问子级
> – 尽管可能需要检索数百万个孩子才能更新一个孩子
> / – 我可以延迟加载吗?由于一致性问题,我读了很多篇文章,认为这是DDD反模式

CHILD作为聚合根

> Performant仅检索要更新的数据
> -Validation因为非常重要,要么父对象必须是root的实体,要么root必须在外部提供父进行验证.这两个选项都会导致问

>因为更新是“put”样式,第一个选项会使子项的创建变得困难(如果我在存储库的find(id)方法中实现创建,那么我没有构建子项的必要信息,如果我把它放在调用存储库的服务中然后我没有办法访问父信息,因为它不是聚合根.
>第二个选项会导致一致性问题,即我可以提供不是正在更新的子级的父级的父级.

两者都是聚合根

> / – 如何确保一致性,即孩子是否由其实际父母验证?

您还没有理解聚合根(AR)是什么.它不是儿童的父容器.它的概念应该按照定义来处理.一对多与识别AR无关.

“子”是在AR上下文中存在的有意义的概念,即它是由AR表示的聚合的一部分.您的示例似乎定义了一个存储库,一个项目容器.它看起来有点像CRUD功能.

您确定自己处于聚合状态而不是在简单服务足够的环境中吗?

网友评论