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