ODMA
Ownership Driven Architecture
Начинаем с владельца ответственности
Перед выбором папки или абстракции определяем три вещи:
- Owner — модуль, владеющий возможностью системы
- Responsibility — поведение и инварианты, за которые он отвечает
- Contract — публичный интерфейс для остальных модулей
Тренировочная программа принадлежит тренировкам. Идентификация — домену identity. Адаптер CMS переводит контракт системы контента, но не становится владельцем бизнес-поведения.
Границы выражают ответственность
Домен может владеть своими моделями, API, UI, административными формами, CMS-плагинами и тестами. Представление домена не становится виджетом только потому, что написано на Vue. Виджеты объединяют возможности, а корень композиции приложения связывает их.
Зависимость оправдывается реальным отношением владельцев. Названия директорий сами по себе не разрешают и не запрещают её. Потребители используют публичный контракт, а не внутренности чужого модуля.
Минимальное целостное изменение
Сначала находим существующее решение, изучаем потребителей и сохраняем намеренные границы. Абстракция должна снижать связанность, локализовать ответственность или устранять существенное дублирование. Работа завершена, когда поведение, типы, тесты и приложение согласованы.