首页 > 解决方案 > 如何对具有一对零或多关系的聚合进行建模

问题描述

我正在阅读 Vaughn Vernon 的实现领域驱动设计一书。但是我很快就遇到了在我的领域建模聚合的麻烦 - 足球比赛。

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

正如我所见,联赛(例如世界杯)将有许多阶段,例如小组赛或淘汰赛阶段。

一个阶段将有很多轮,例如。16强、1/4决赛等

一轮会有很多比赛。

但是,有些联赛没有舞台,例如。超级联赛。即使是国际友谊联赛也没有舞台和回合

第一个解决方案:

我们将有 4 个聚合:

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

第二种解决方案:

联赛将包含比赛。Stage 或 Round 只是 Match 的属性(值对象)

第三种解决方案:

创建所有类型的联赛:

标签: domain-driven-design

解决方案


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

如果您想要一个数据模型,那么 DDD 就无关紧要,因为这不是一种数据建模技术。

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

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


推荐阅读