Перейти к содержанию

Группы

Группа является необязательным навигационным классификатором модулей внутри одного слоя. Она помогает ориентироваться в дереве владельцев, но не реализует ответственность и не создаёт архитектурную границу.

Место в модели

Модуль может находиться непосредственно в слое или внутри одной или нескольких групп:

text
слой
├── модуль
└── группа
    ├── модуль
    └── группа
        └── модуль

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

text
compositions/
├── pages/              # Группа
│   ├── catalog/        # Модуль
│   └── profile/        # Модуль
├── layouts/            # Группа
│   └── main/           # Модуль
└── widgets/            # Группа
    └── dashboard/      # Модуль, компонующий несколько доменных API

Названия pages, layouts и widgets показывают один из вариантов навигации и не создают дополнительные слои или обязательные роли.

Модули catalog, profile и dashboard в примере отвечают только за представление и связывание готовых публичных API. Сценарии каталога, профиля и других предметных областей остаются в соответствующих модулях domains.

Ограничения группы

Группа:

  • содержит только модули и вложенные группы;
  • не владеет файлами реализации;
  • не имеет состояния или жизненного цикла;
  • не предоставляет публичный API;
  • не является узлом графа зависимостей;
  • не импортируется внешним кодом;
  • не реэкспортирует содержащиеся в ней модули.

Barrel-файл, открывающий несколько модулей группы как единый контракт, превращает каталог в новую модульную границу. Если такой контракт действительно нужен, для него определяется ответственность и создаётся обычный модуль.

Группы и зависимости

Принадлежность модулей одной или разным группам не влияет на допустимость импорта. Модули одного слоя могут зависеть друг от друга через публичные API, если общий граф остаётся ацикличным.

Код импортирует конкретный модуль:

ts
import { Dashboard } from '@/compositions/widgets/dashboard'

Группа не становится промежуточной точкой доступа:

ts
// Недопустимый API группы
import { Dashboard } from '@/compositions/widgets'

Полные правила графа находятся в разделе Зависимости.

Группа и сегмент

Группа организует несколько модулей внутри слоя. Сегмент организует код внутри одного модуля.

ГруппаСегмент
Находится снаружи модульной границыНаходится внутри модульной границы
Содержит модули и группыСодержит внутреннюю реализацию владельца
Не принадлежит одному модулюВсегда принадлежит ближайшему модулю
Не содержит файлы реализацииСуществует для организации файлов реализации

Связанные правила

Документация SLM Design