# Группы Группа является необязательным навигационным классификатором модулей внутри одного слоя. Она помогает ориентироваться в дереве владельцев, но не реализует ответственность и не создаёт архитектурную границу. ## Место в модели Модуль может находиться непосредственно в слое или внутри одной или нескольких групп: ```text слой ├── модуль └── группа ├── модуль └── группа └── модуль ``` Группа создаётся, когда плоский список модулей перестаёт быть понятным. Названия и глубину групп определяет проект. ```text compositions/ ├── pages/ # Группа │ ├── catalog/ # Модуль │ └── profile/ # Модуль ├── layouts/ # Группа │ └── main/ # Модуль └── widgets/ # Группа └── cart-summary/ # Модуль ``` Названия `pages`, `layouts` и `widgets` показывают один из вариантов навигации и не создают дополнительные слои или обязательные роли. ## Ограничения группы Группа: - содержит только модули и вложенные группы; - не владеет файлами реализации; - не имеет состояния или жизненного цикла; - не предоставляет публичный API; - не является узлом графа зависимостей; - не импортируется внешним кодом; - не реэкспортирует содержащиеся в ней модули. Barrel-файл, открывающий несколько модулей группы как единый контракт, превращает каталог в новую модульную границу. Если такой контракт действительно нужен, для него определяется ответственность и создаётся обычный модуль. ## Группы и зависимости Принадлежность модулей одной или разным группам не влияет на допустимость импорта. Модули одного слоя могут зависеть друг от друга через публичные API, если общий граф остаётся ацикличным. Код импортирует конкретный модуль: ```ts import { CartSummary } from '@/compositions/widgets/cart-summary' ``` Группа не становится промежуточной точкой доступа: ```ts // Недопустимый API группы import { CartSummary } from '@/compositions/widgets' ``` Полные правила графа находятся в разделе [Зависимости](./dependencies.md). ## Группа и сегмент Группа организует несколько модулей внутри слоя. [Сегмент](./segments.md) организует код внутри одного модуля. | Группа | Сегмент | |---|---| | Находится снаружи модульной границы | Находится внутри модульной границы | | Содержит модули и группы | Содержит внутреннюю реализацию владельца | | Не принадлежит одному модулю | Всегда принадлежит ближайшему модулю | | Не содержит файлы реализации | Существует для организации файлов реализации | ## Связанные правила - [`SLM-GROUP-R007`](../rules/registry.md#slm-group-r007) - [`SLM-MODULE-R011`](../rules/registry.md#slm-module-r011) - [`SLM-DEPENDENCY-A005`](../rules/registry.md#slm-dependency-a005)