Files
slm-design/docs/rules/README.md

63 lines
4.3 KiB
Markdown
Raw Normal View History

2026-08-10 09:12:22 +03:00
# Правила 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` классифицирует правило о группировке, а сама группа остаётся необязательной частью слоя.
## Требования к реестру
- Одно правило защищает один инвариант.
- Точная формулировка не повторяется в тематических документах.
- Название кратко обозначает предмет, а описание полностью формулирует требование.
- Рекомендации, обоснования и примеры не входят в формулировку правила.
- Один инвариант не получает отдельные автоматическую и ручную копии.
- Номер правила не обозначает важность и не переиспользуется после удаления.