mirror of
https://github.com/gromlab-ru/slm-design.git
synced 2026-08-22 07:30:16 +03:00
82 lines
4.3 KiB
Markdown
82 lines
4.3 KiB
Markdown
# Группы
|
||
|
||
Группа является необязательным навигационным классификатором модулей внутри одного слоя. Она помогает ориентироваться в дереве владельцев, но не реализует ответственность и не создаёт архитектурную границу.
|
||
|
||
## Место в модели
|
||
|
||
Модуль может находиться непосредственно в слое или внутри одной или нескольких групп:
|
||
|
||
```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)
|