如何以一对零或多关系建立聚合模型

时间:2018-12-17 20:34:14

标签: domain-driven-design

我正在阅读Vaughn Vernon的《实现域驱动设计》一书。但是我很快就无法为自己的领域(足球比赛)建模聚合了。

我的情况是根据某些条件(过滤器)列出所有匹配项,例如:

  • 列出将要进行的联赛所有比赛
  • 列出组中联赛的所有比赛
  • 列出淘汰赛阶段联赛的所有比赛

我看到一个联赛(例如世界杯)将有很多阶段,例如小组赛或淘汰赛。

一个阶段会有很多回合,例如。 16轮四分之一决赛等

一个回合将有很多比赛。

但是,某些联赛没有舞台,例如。超级联赛。甚至 友谊赛国际联赛没有阶段性比赛和全面比赛

第一个解决方案:

我们将有4个汇总:

  • 联盟将包含阶段
  • 舞台将包含回合
  • 比赛将包含比赛

对于没有舞台或回合的联赛,将为舞台和回合(例如)创建一个特殊的标识符。 NO_STAGE或NO_ROUND

第二个解决方案:

联盟将包含比赛。阶段或回合只是匹配的属性(值对象)

第三种解决方案:

创建所有类型的联赛:

  • 联赛有阶段,回合和比赛
  • 联盟有回合和比赛
  • 联赛只有比赛

1 个答案:

答案 0 :(得分:1)

潜在的问题是,您正在尝试对数据而非行为进行建模。您正在创建一个关系模型(其中包含什么,一对一,一对多等),而不是对象模型。没有数据必须支持什么功能的上下文,对数据进行建模就毫无意义。

如果您只想建立数据模型,则DDD无关紧要,因为这不是数据建模技术。

我假设您想构建面向对象的软件。在这种情况下,通过确定想要从软件中获得什么功能并对其进行建模,来解决问题。

例如:安排比赛,准备/显示事件日历,模拟进度等。