DDD与多对多聚合路由关系

DDD and many to many aggregate route relationship

我是 DDD 的新手,我正在为聚合路由的概念及其在 ASP .NET Core 中的实现而苦苦挣扎。

基本上,我有两条聚合路由(AR):

可以有多个用户的组,每个用户可以属于许多不同的组。

如果我理解正确,聚合路由的规则关系如下:

事实上,一个 AR 不应该导航 属性 到另一个意味着我必须以某种不同的方式连接它们,例如使用 ValueObject。

ValueObject:UserToGroup(由于可序列化,不能有导航属性)

AR 用户:

AR 组

通过这个设置,我设法按照规则获得了一切。但是出现了一个无法解释的问题。 如何查询组中的所有用户? 例如,我可以这样做(使用 LINQ): var ids = group.Users.Select(g => g.UserId) var usersFromGroup = userRepository.FetchByIds(ids)

但这似乎有点愚蠢,我觉得我基本上扼杀了 EF 最好的功能之一,导航属性...

关于如何以某种更好的方式实现它的任何建议?

非常感谢您的回复。

布鲁诺

我的建议是永远不要查询领域模型。

在某些情况下,查询中所需的完整数据可能会 available/surfaced 在域对象(聚合根)的特定实例中。但是这个more-often-than-not不是这样的

查询应该是一个特定的问题,并尽可能靠近数据存储。通常,数据要么以某种 low-level 数据结构返回,例如 DataRow 或者 读取模型 (数据传输对象)。领域对象永远不应该跨越电线(好吧,这是我的看法)。

为了查询,我将使用 ISomethingQuery 的实现,其中我的域交互将通过 ISomethingRepository。通过这种方式,您可以远离导航属性和奇怪的东西,例如“lazy-loading”。您可以指定所需的数据。

上述结构通常会导致 ORM 不一定增加很多价值但 YMMV 的情况。