【发布时间】:2020-09-03 13:26:26
【问题描述】:
我想通过一个建模练习来尝试更好地理解 DDD,特别是在存在多对多关系的情况下
让我们以 Xbox 用户及其成就为例。
如果你不熟悉这是背景: Xbox 上的每个游戏都有成就。 用户将拥有他们拥有/玩过的游戏列表,他们可以解锁这些游戏的成就。
这里是多对多的关系,一个用户可以有很多游戏,而一个游戏可以有很多用户。
不用多说,这里肯定有两个聚合根。用户和游戏。 游戏聚合根有一个成就列表。
我的困惑来自于跟踪特定游戏的用户进度。 例如他们有哪些游戏,以及他们在每场游戏中取得的成就。
您现在如何为 DDD 建模?
User Game 和 User Achievement 将包含有关每个进度的信息。
这是我目前认为的解决方案,但是对吗?
一个游戏的进度和它的个人成就似乎也有联系,我会说这是它自己的总根。这是因为就像游戏及其成就一样,它可能具有交易边界。当您在游戏成就上取得进展时,这可能会影响游戏的进度(例如,解锁成就会增加游戏玩家获得的总得分。)
我一直听说你想解决多对多关系,这通常没问题,但这里的关系有自己的数据,我不认为这种关系属于任何一个。
您可能会争辩说您会将它放在用户聚合上,但我担心它会增加该用户聚合的权重,并且没有理由让它存在。 我不认为有任何事务边界,我不喜欢当你想加载它时必须加载所有用户的游戏。即使这是延迟加载,我担心它可能会导致并发问题?
这就是为什么我认为这里的多对多关系是有效的,以及为什么新的聚合根可能是合适的。
也就是名字用户游戏进度连对了。了解领域,您有什么建议?
谢谢你,任何帮助都非常感谢。
【问题讨论】:
标签: many-to-many aggregate domain-driven-design