如何处理两个单独的聚合根持有对相同数据的引用?

时间:2013-09-30 10:22:11

标签: c# nosql domain-driven-design

在对体育赛事进行建模的领域模型中,应如何处理此场景,尤其是在使用无sql文档数据库来保存数据的情况下。

系统中的主要实体是赛季,锦标赛组,锦标赛,锦标赛阶段,比赛,球员。

赛季 - 赛季有一个开始日期,结束日期,一个有序的球员集合和一个锦标赛集合。

锦标赛组 - 锦标赛组包含一系列锦标赛,每个锦标赛只能属于一个锦标赛组。我不确定这实际上是否应该是一个实体。

比赛 - 比赛有一个开始日期,结束日期,一个有序的球员集合和一个有序的比赛阶段收集。

比赛 - 阶段 - 比赛阶段有一个有序的比赛集合。不确定这是否应该是一个实体,因为它只是一种在锦标赛中进行比赛的方式。

匹配 - 匹配包含播放器的集合。

这让我感到困惑,因为到目前为止我会说聚合根是赛季,但我不知道玩家在这个模型中的位置,我可能不会处理锦标赛正确分组。

需要为赛季,锦标赛组和玩家生成统计数据,例如谁在一个赛季得分最高,谁在锦标赛组中得分最高,以及他在得分最多的锦标赛,赛季或锦标赛组的球员。

为了获得这些数据,我认为玩家实体必须持有对锦标赛和比赛的引用,但这些参考文献也有助于季节。这是否可以接受?如果一个聚合根中的数据在另一个聚合根中发生变化,那么更新数据的最佳策略是什么?

1 个答案:

答案 0 :(得分:1)

这不是一个容易回答的问题,因为您描述的大部分内容都是您的域的词汇表,其中提示表示行为是什么(但没有附加 important 那种行为)。如果你要记下每个场景,你的模型必须支持(你知道到目前为止),然后创建,挑战&通过尝试实现每个场景来演化该模型,您最终会得到与上述内容完全不同的东西。可能是多个模型,每个模型解决不同的方面。聚合是围绕一组实体和值对象的行为集群,而不是您尝试将行为改造为名词的实体。

如果我要给你任何建议,请将季节,锦标赛等的管理分开,实际记录实际赛季期间发生的事情,从报告你可能希望在赛季期间或赛季期间获得的任何类型的统计数据。赛季结束。