Как моделировать агрегаты с отношением один к нулю или многими - PullRequest
0 голосов
/ 17 декабря 2018

Я читаю книгу «Внедрение доменного дизайна» Вона Вернона.Но вскоре у меня возникают проблемы с моделированием агрегатов в моем домене - футбольные матчи.

В моем случае перечисляются все совпадения на основе некоторых условий (фильтров), например:

  • перечисляют всематчи лиги, которые состоятся
  • список всех матчей лиги в группе
  • список всех матчей лиги на стадии нокаута

Как я вижуЛига (например, Кубок мира) будет иметь много этапов, таких как групповой этап или этап нокаута.

На этапе будет много раундов, например.Раунд 16, Четвертьфиналы и т. Д.

В раунде будет много матчей.

Однако в некоторых лигах нет этапа , например.Премьер Лига.Даже в дружественных международных лигах нет ни этапа, ни раунда .

Первое решение:

У нас будет 4 агрегата:

  • Лига будет содержать Этапы
  • Этап будет содержать Раунды
  • Раунд будет содержать Матчи

Для лиг, не имеющих Стадию или Раунд, специальный идентификатор будетбыть созданным для этапа и раунда, напр.NO_STAGE или NO_ROUND

Второе решение:

Лига будет содержать Матчи.Этап или Раунд - это просто атрибуты (Объекты Значения) Матча

Третье решение:

Создание всех типов Лиги:

  • Лига имеетэтапы, раунды и матчи
  • Лига имеет раунды и матчи
  • Лига имеет только матчи

1 Ответ

0 голосов
/ 18 декабря 2018

Основная проблема заключается в том, что вы пытаетесь смоделировать данные, а не поведение.Вы создаете реляционную модель (что содержит, один к одному, один ко многим и т. Д.), А не объектную модель.Моделирование данных не имеет смысла без контекста того, какую функциональность он должен поддерживать.

Если вы делаете хотите только модель данных, то DDD не имеет значения, поскольку это не метод моделирования данных.

Полагаю, вы хотите создать объектно-ориентированное программное обеспечение.В этом случае подойдите к проблеме, определив, какую функциональность вы хотите использовать в своем программном обеспечении, и смоделируйте ее.

Например: запланируйте совпадения, подготовьте / отобразите календарь событий, смоделируйте прогресс,и т.д.

...