mirror of
https://github.com/gromlab-ru/slm-design.git
synced 2026-08-22 07:30:16 +03:00
63 lines
4.3 KiB
Markdown
63 lines
4.3 KiB
Markdown
# Правила SLM
|
||
|
||
Правило SLM задаёт один блокирующий архитектурный инвариант. Точные формулировки правил находятся только в [едином реестре](./registry.md); архитектурные главы объясняют модель и ссылаются на соответствующие коды.
|
||
|
||
## Виды утверждений
|
||
|
||
- **Определение** задаёт нормативный смысл термина.
|
||
- **Правило** задаёт блокирующее требование.
|
||
- **Рекомендация** помогает принять решение, но не является обязательной.
|
||
- **Пример** показывает один из вариантов реализации и не задаёт каркас проекта.
|
||
|
||
Определения собраны в [терминологии](../reference/terminology.md). Определение может быть обязательным для толкования правил, но не получает отдельный код.
|
||
|
||
## Код правила
|
||
|
||
```text
|
||
SLM-{group}-{class}{number}
|
||
```
|
||
|
||
| Часть | Значение |
|
||
|---|---|
|
||
| `SLM` | Принадлежность архитектуре SLM |
|
||
| `group` | Предмет правила |
|
||
| `class` | Способ окончательной проверки: `A` или `R` |
|
||
| `number` | Глобально уникальный трёхзначный номер |
|
||
|
||
Пример: [`SLM-MODULE-A004`](./registry.md#slm-module-a004).
|
||
|
||
## Способ проверки
|
||
|
||
### Автоматические правила (`A`)
|
||
|
||
Всё требование можно однозначно проверить программно по структуре проекта, публичным путям и графу импортов. Нарушение блокирует автоматическую проверку.
|
||
|
||
### Правила для ревью (`R`)
|
||
|
||
Для окончательного решения требуется понимание ответственности, владельца, потребителей или области жизни. Инструмент может найти подозрительный код, но не заменяет архитектурное решение.
|
||
|
||
## Разделы правил
|
||
|
||
| Код | Предмет |
|
||
|---|---|
|
||
| `LAYER` | Роль слоя и направление зависимостей |
|
||
| `MODULE` | Ответственность, владение и публичная граница модуля |
|
||
| `DEPENDENCY` | Граф зависимостей модулей |
|
||
| `GROUP` | Навигационная группировка модулей |
|
||
| `SEGMENT` | Внутренняя организация модуля |
|
||
| `COMPONENT` | Принадлежность компонента модулю |
|
||
| `NESTED_MODULE` | Доступ к вложенному модулю |
|
||
| `LIFECYCLE` | Владение долгоживущими ресурсами |
|
||
| `ENVIRONMENT` | Совместимость публичных фасетов со средами выполнения |
|
||
|
||
Раздел правила не создаёт одноимённую главу или дополнительный уровень архитектуры. Например, `GROUP` классифицирует правило о группировке, а сама группа остаётся необязательной частью слоя.
|
||
|
||
## Требования к реестру
|
||
|
||
- Одно правило защищает один инвариант.
|
||
- Точная формулировка не повторяется в тематических документах.
|
||
- Название кратко обозначает предмет, а описание полностью формулирует требование.
|
||
- Рекомендации, обоснования и примеры не входят в формулировку правила.
|
||
- Один инвариант не получает отдельные автоматическую и ручную копии.
|
||
- Номер правила не обозначает важность и не переиспользуется после удаления.
|