Domain driven design 我可以在子实体中引用另一个聚合根吗?

Domain driven design 我可以在子实体中引用另一个聚合根吗?,domain-driven-design,Domain Driven Design,我是建模用户管理领域,我必须解决领域活动,如注册、登录、角色管理等。。我已经提出了下面的汇总 当用户注册获得批准时,我必须在users表中添加一个条目,然后保留他的角色 用户-->用户角色(子实体) 可以通过选择适当的权限来创建新角色 角色-->角色权限(子实体) 特权主表 特权 我的问题是,在Users aggregate的用户角色(子实体)中,我可以拥有链接到角色聚合根的角色\u id吗 如果我必须持久化用户角色,那么业务不变量就是确保这些角色是有效的角色,因此我必须根据角色主机验证角色id

我是建模用户管理领域,我必须解决领域活动,如注册、登录、角色管理等。。我已经提出了下面的汇总

当用户注册获得批准时,我必须在users表中添加一个条目,然后保留他的角色

用户-->用户角色(子实体)

可以通过选择适当的权限来创建新角色

角色-->角色权限(子实体)

特权主表

特权

我的问题是,在Users aggregate的用户角色(子实体)中,我可以拥有链接到角色聚合根的角色\u id吗

如果我必须持久化用户角色,那么业务不变量就是确保这些角色是有效的角色,因此我必须根据角色主机验证角色id。那么在同一事务中,可以从另一个聚合读取数据吗?请注意,这些聚合在同一个微服务中

感谢您的帮助。

定义“链接”

聚合可以通过一个稳定的标识符(例如字符串ID)引用/链接到另一个聚合根。然后,您可以使用该ID请求另一个聚合(例如,从存储库)。使用其他聚合,您可以执行读取,但不应执行更新

请记住,聚合定义了一致性和事务边界。您获得的聚合不必是该聚合的最新版本:它是您请求它之前某个时间点的聚合版本(希望它是您请求它时的最新版本,但可能并非总是如此),并且它不能反映自您请求它以来的更改

但是,如果您的引用/链接是通过更直接的方式进行的,那么这些一致性/事务性边界就会被违反,因此这通常是不允许的(或者至少不是一个好主意,因为您放弃了DDD的其他好处)