具有多对多关系的DDD聚合设计示例

问题描述 投票:1回答:2

[我想通过建模练习来尝试更好地理解DDD,特别是在存在多对多关系的情况下

让我们以Xbox用户及其成就为例。

如果您不熟悉,这是背景:Xbox上的每个游戏都有成就。用户将拥有自己拥有/玩过的游戏的列表,他们可以解锁这些游戏的成就。

这里存在多对多关系,因为一个用户可以有很多游戏,而一个游戏可以有很多用户。

[不进一步讲,这里肯定有两个聚合根。用户和游戏。游戏集合根目录具有成就列表。

我的困惑在于跟踪特定游戏用户的进度。例如,他们拥有哪些游戏,每场比赛都有哪些成就。

在典型的CRUD设计中,可能看起来像这样:enter image description here

您现在如何为DDD建模?

[用户游戏和用户成就将具有有关各自进度的信息。

这是我目前认为的解决方案,对吗?

enter image description here用户和游戏都是聚合根。

游戏的进度和个人成就似乎也联系在一起,我想说这是它自身的总根。这是因为像游戏及其成就一样,它可能具有交易边界。当您在游戏的成就上取得进展时,这可能会影响游戏的进度(例如,解锁成就会提高整个游戏的玩家得分。)

[我一直听说您想解决多对多关系,这通常很好,但是在这里,该关系具有其自己的数据,我认为该关系也不属于任何关系。

您可能会争辩说您应该将其放在用户集合上,但是我担心的是,它增加了该用户集合的权重,因此没有理由存在。我认为没有交易界限,而且我不喜欢必须在加载时加载所有用户游戏的情况。即使这是延迟加载,我担心它可能会导致并发问题?

这就是为什么我认为这里的多对多关系有效,以及为什么可能需要新的聚合根。

名称用户游戏进度甚至也正确。了解域名,您可能会建议什么?

谢谢您,所有帮助都得到了广泛的应用。

many-to-many aggregate domain-driven-design
2个回答
0
投票
您在这里寻找的是Domain Events。从Microsoft文档:

0
投票
我认为您不会为您的问题找到比“取决于”更具体的权威答案。
© www.soinside.com 2019 - 2024. All rights reserved.