我正在尝试使用 DDD 和洋葱/六边形/干净架构(使用 Java 和 Spring)构建应用程序。我发现找到有关概念本身的指导比实际如何实施它们更容易。特别是 DDD 似乎很难找到有指导意义的例子,因为每个问题都是独一无二的。我在 SO 上看到了很多有用的例子,但我仍然有疑问。我想知道通过我的例子是否会帮助我和其他任何人。
我希望你能原谅我在这里问了不止一个问题。这个例子似乎太大了,我在多个问题中重复它没有意义。
语境:
我们有一个应用程序,它应该显示有关足球统计数据的信息,并具有以下概念(为简单起见,我没有包括所有属性):
- 拥有众多球员的团队。
- 球员。
- 夹具,有 2 个团队和 2 个半场。
- Half,其中有 2 个 FormationsPlayed 和许多组合。
- FormationPlayed,其中有很多 PositionsPlayed。
- PositionPlayed,它有 1 个玩家和一个位置值对象。
- 组合,可以是2种类型,并且有很多Move。
- Move 可以有 2 种类型,有 1 个 Player 和一个事件值对象。
可以想象,试图找出哪些事物是聚合根是很棘手的。
- 团队可以独立存在,AR 也是如此。
- Player 可以独立存在,AR 也是如此。
- Fixture 在删除时也必须删除它的 Halves,AR 也是如此。
- Half 必须是 Fixture 中的实体。
- 删除一半时必须删除FormationPlayed,所以也许这应该是Half中的一个实体。
- 当一个 Formation 被删除时,PositionPlayed 必须被删除,所以相信这应该是 FormationPlayed 中的一个实体。
- 某种意义上的组合可以独立存在,尽管与特定的游戏半场相关。也许这可能是一个受最终一致性约束的 AR。
- 当一个组合被删除时,移动必须被删除,所以相信这应该是组合中的一个实体。
问题:
- 你看到上面的设计有什么错误吗?如果是这样你会改变什么?
- Fixture - Half - FormationPlayed - PositionPlayed 聚合似乎太大,所以我想知道您是否同意可以使用最终一致性将其拆分为 Fixture - Half 和 FormationPlayed - PositionPlayed。我找不到一个例子是这是如何在 …