围绕这个问题有两个实体,主要是
- 排行榜 - 包含关于类型(最低优先/最高优先)、描述、名称等的信息。
- 得分 - 玩家提交的得分值,其中包含玩家详细信息和得分值
用例:
- 我们需要获取前 10 名的得分
- 对于每月排行榜,我们需要找到前 3 名
域规则:
- 玩家可以提交任意数量的分数
- 排行榜排名需要基于排行榜中定义的类型(最低/最高)
对于这样一个系统
- 排行榜和分数有1对多的关系
- 分数需要有关于玩家信息的信息(这是一个单独的聚合根并且在不同的边界上下文中)
如何在 DDD 中设计它?
场景 1: 排行榜是否将是聚合根并且分数将通过排行榜聚合根添加(对于每个分数)?
查询:
在这里,没有排行榜,分数没有意义,也没有域规则坚持通过排行榜聚合根添加分数。这实际上是一个两难境地,如何处理?
如何获取玩家详细信息以输入分数?我是否需要在域服务中获取玩家详细信息并在添加分数时提供排行榜聚合根?
场景 2:Leaderboard 和 LeaderboardScore 是两个不同的聚合根。
查询:
在计算排名时,我们需要从分数聚合根中获取分数并从排行榜中输入信息并完成用例?
这里的大部分用例服务代码需要在域服务或应用程序服务中?