微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在尝试建模一个非常简单的域,它具有概念(一个)PARENT – > (许多)子.问题在于关系中的孩子数量可能达到数百万.

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

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

PARENT作为聚合根

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

CHILD作为聚合根

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

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

两者都是聚合根

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

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐