mirror of
https://github.com/gromlab-ru/slm-design.git
synced 2026-08-22 07:30:16 +03:00
chore: sync
This commit is contained in:
81
docs/architecture/groups.md
Normal file
81
docs/architecture/groups.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# Группы
|
||||
|
||||
Группа является необязательным навигационным классификатором модулей внутри одного слоя. Она помогает ориентироваться в дереве владельцев, но не реализует ответственность и не создаёт архитектурную границу.
|
||||
|
||||
## Место в модели
|
||||
|
||||
Модуль может находиться непосредственно в слое или внутри одной или нескольких групп:
|
||||
|
||||
```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)
|
||||
Reference in New Issue
Block a user