Как разрывать длинные цепи вложенностей при моделировании предметной области по DDD?
Недавно познакомился с такой техникой, как DDD - для её демонстрации преподаватель показал моделирование игры в Дартс. Вкратце, без лишних не относящихся к вопросу деталей, модель выглядит так: Класс Match (корень) содержит список классов Leg. Класс Leg содержит список классов SinglePlayerLeg. Класс SinglePlayerLeg содержит список классов Turn. Класс Turn содержит список классов ThrowResult.
Итого: Match ◆- Leg ◆- SinglePlayerLeg ◆- Turn ◆- ThrowResult.
В результате получается модель, которая воспроизводит структуру предметной области "в лоб", как есть, и с трудом помещается в голову. Для простой модели из нескольких классов это, возможно, не проблема, но бывают же весьма сложные предметные области, в которых такая прямолинейная модель проблемы создаст. Есть ли способы превратить превратить исходное дерево объектов во что-то более простое - например, в несколько маленьких "кустов"?))
Заранее спасибо за советы!
Вид дерева объектов до рефакторинга (урезанное для экономии, не помещалось):
Вид дерева после возможного рефакторинга:
Ответы (1 шт):
А вот из-за этого как-раз и придумали Dependency Inversion, Microservices и прочие парадигмы для "разрыва цепочек". Ещё это называется "loose coupling" или "слабая связанность".
Вы просто изолируете несколько отдельных "доменных моделей" друг от друга, а потом связываете их через абстракции (DI) или через API и брокеры сообщений (микросервисы). Но связи эти не жёсткие ("слабые"), вы можете отдельно развивать эти модели независимо друг от друга, а в случае микросервисов, можете их даже деплоить независимо. А для того, чтобы они между собой могли общаться, им достаточно исполнять некие "контракты", являющиеся абстракциями более высокого уровня.
P.S. Так то и на уровне классов и в одной иерархии бывают не банальные топологии. Например, если взять биржевую тематику. Одни и те же акции могут котироваться на разных досках "board", и на разных биржах. И не только акции, но и валюты. Один инструмент (акции, валюты, облигации) может продаваться как есть, а может в виде фьючерса или опциона. Может на основной сессии полными лотами, а может на внебиржевой одиночными. И т.д. и т.п. Какое уж там "дерево", нарисовать граф зависимостей для такой предметной области бывает весьма нетривиальной задачей. И это не только на бирже так, а много вообще где, если начать разбираться.