gpt4 book ai didi

domain-driven-design - 如何处理resolvejs中聚合根之间的关系

转载 作者:行者123 更新时间:2023-12-04 07:27:24 25 4
gpt4 key购买 nike

我无法弄清楚如何处理有关 resolvejs 中聚合根之间关系的一些基本内容。基本问题是我如何处理关系的完整性?为此,您似乎需要同时了解双方的知识,但这在写入方面似乎是不允许的。
设置如下:我正在尝试构建一个用户管理工具,我有两个聚合根,UserOrganisation .我需要允许两者独立存在并定义一个 access它们之间的关系(即用户可以访问任意数量的组织)。
如果关系属于User ,我可以创建一个像 grantAccessToOrganisation 这样的命令在 User聚合采用 organisationId但这提出了几个问题。我如何确保 organisationId提供的是真的吗?似乎它需要在命令处理程序中发生,但由于该命令属于 User聚合,我无权访问 Organisation总计的。另外,当一个组织被移除时,我应该如何处理?似乎这应该对所有有权访问它的用户产生副作用,但我似乎没有在写入端进行该查询的好方法。

最佳答案

尽量不要将聚合视为传统系统中的“实体”。选择聚合根作为事务和一致性边界。
这意味着对给定聚合的所有命令都是连续的,其状态是一致的,这意味着您可以确保您的命令应用于预期的聚合状态,并且其他用户或进程没有进行任何更改。
作为一个极端的例子,您甚至可以拥有一个聚合“系统”,并且您可以访问整个系统状态。但这意味着状态的大小将是巨大的,每个命令都会锁定整个系统。
因此,请选择足够大的聚合来控制其交易,而选择足够小的聚合来阻止其他交易。
在您的示例中,我可以猜测用户更多地是关于身份、登录、个人资料、头像——诸如此类。它可以在不了解码织和访问权限的情况下生存。组织是处理访问权限的集合,更改访问权限是影响单个组织的事务。
因此,我会将 grantAccess 命令发送给组织,而不是您示例中的用户。但当然这取决于其他要求,我在这里可能是错的。
此外,总会有一些可以用 saga 实现的聚合间业务规则。例如,如果用户登录被禁用,则其访问权限将在 30 天后删除。 Saga 是一个长期运行的业务事务,可以影响多个聚合。

关于domain-driven-design - 如何处理resolvejs中聚合根之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68137694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com