domain-driven-design – DDD在两个聚合中使用不变量修改每个事务的一个聚合

domain-driven-design – DDD在两个聚合中使用不变量修改每个事务的一个聚合,第1张

概述假设我有一个聚合根租户和一个聚合根组织.倍数组织可以链接到单个租户.租户只有其中的组织ID. 假设我在组织聚合中具有以下不变量:组织只能为特定产品类型订阅一个. 假设我在租户聚合中具有以下不变量:对于与租户相关的所有组织,只能存在一个产品类型的订阅. 我们如何使用每个事务聚合规则强制执行这些不变量? 在向组织添加订阅时,我们可以轻松验证第一个不变量,并触发域事件以更新(最终一致性)租户,但如果在租 假设我有一个聚合根租户和一个聚合根组织.倍数组织可以链接到单个租户.租户只有其中的组织ID.

假设我在组织聚合中具有以下不变量:组织只能为特定产品类型订阅一个.

假设我在租户聚合中具有以下不变量:对于与租户相关的所有组织,只能存在一个产品类型的订阅.

我们如何使用每个事务聚合规则强制执行这些不变量?
在向组织添加订阅时,我们可以轻松验证第一个不变量,并触发域事件以更新(最终一致性)租户,但如果在租户聚合中违反了不变量会发生什么?

是否意味着触发另一个域事件来回滚组织聚合中发生的事情?在成功修改第一个聚合之后,在将响应发送到UI的情况下看起来很棘手.

或者,这里真正的方法是在启动更新之前使用域服务来验证两个聚合的不变量?如果是这样,我们是否将不变量/规则直接放在域服务中,还是在聚合上放置一些布尔验证方法以保持逻辑?

UPDATE
如果违反了一个不变量,UI必须阻止用户保存在UI中,该怎么办?在这种情况下,我们甚至没有尝试更新聚合.

解决方法 您可能想要考虑的一件事是您的域中缺少概念的可能性.您可能希望探索您的场景作为订阅计划概念的可能性,该概念本身就是一个聚合并强制执行您当前尝试放入租户/组织聚合中的所有这些规则.

面对这样的情景时,我倾向于认为“如果没有任何系统可以促进这项运作,那么组织会做些什么”.在您的情况下,如果同一个租户中有多个人,每个人都对一个组织负责……他们如何同步他们的订阅以遵守不变量?

在这样的练习中,您可能会达到一些已经探索过的场景:

>举行聚会活动(例如电话会议)以确保没有进行冗余订阅:这是域服务路径.
>每个人都有自己的订阅,他们互相通知,最终收回多余的订阅:这就是事件回滚路径.
>他们可能会妥协并保留一个共享分类账,他们可以在那里检查订阅如何在公司范围内进行,而分类账是这些决策的权威:这是缺少的聚合路径.

如果你足够强调问题,你可能会达到其他选择.

@H_403_41@ 总结

以上是内存溢出为你收集整理的domain-driven-design – DDD在两个聚合中使用不变量修改每个事务的一个聚合全部内容,希望文章能够帮你解决domain-driven-design – DDD在两个聚合中使用不变量修改每个事务的一个聚合所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1085208.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存