mirror of
https://github.com/gromlab-ru/slm-design.git
synced 2026-08-22 07:30:16 +03:00
sync
This commit is contained in:
51
DRAFT/architecture/validation.md
Normal file
51
DRAFT/architecture/validation.md
Normal file
@@ -0,0 +1,51 @@
|
||||
# Проверка SLM
|
||||
|
||||
> Граница автоматической проверки и архитектурного ревью SLM.
|
||||
|
||||
## Автоматическая проверка
|
||||
|
||||
Проект, заявляющий соответствие SLM, сопоставляет физические пути с SLM root, слоями, модулями, Groups, вложенными модулями, публичными фасетами, точками входа `app` и ресурсами `shared`. Такое сопоставление задаётся стайлгайдом или конфигурацией проверки и не изменяет нормативный смысл сущностей.
|
||||
|
||||
Каждое правило класса `A` должно быть реализовано проверкой проекта и блокировать её при нарушении. SLM не навязывает конкретный инструмент.
|
||||
|
||||
Скрипт `draft-rules.js` проверяет только целостность документов: формат и уникальность кодов, ссылки и наличие тематических упоминаний. Он не проверяет архитектуру приложения.
|
||||
|
||||
Актуальный список правил скрипт получает из [канонического реестра](../rules/registry.md).
|
||||
|
||||
## Архитектурное ревью
|
||||
|
||||
Правила класса `R` проверяются вручную. Статический анализ может обнаружить подозрительный код, но не способен окончательно определить:
|
||||
|
||||
- ответственность и её владельца;
|
||||
- связность ответственности модуля;
|
||||
- соответствие кода роли слоя;
|
||||
- необходимость экспортов публичного API;
|
||||
- область жизни ресурса и достаточность очистки;
|
||||
- наличие самостоятельной границы у компонента, группы или сегмента.
|
||||
|
||||
## Проверка фасетов
|
||||
|
||||
Автоматическая проверка сопоставляет публичные пути модуля с фасетами `index`, `client`, `browser` и `server`, запрещает остальные внешние пути и проверяет их runtime-импорты и реэкспорты, включая транзитивные.
|
||||
|
||||
Для проверки сред инструмент различает runtime imports, type-only imports и dynamic imports. Окончательное решение о соответствии экспортируемого кода назначению фасета принимается на ревью.
|
||||
|
||||
На ревью проверяется:
|
||||
|
||||
- экспортирует ли `index` только универсальные типы и runtime-код;
|
||||
- остаётся ли `client` совместимым с server prerender и browser hydration;
|
||||
- достигается ли `browser` только через dynamic boundary с отключённым SSR;
|
||||
- остаётся ли `server` недоступным через `index`, `client` и `browser`;
|
||||
- существует ли каждый специализированный фасет ради реального потребителя;
|
||||
- не дублируется ли один runtime-export между фасетами.
|
||||
|
||||
Название файла, директива `use client`, tree shaking или локальная проверка `typeof window` сами по себе не доказывают совместимость кода со средой выполнения.
|
||||
|
||||
## Проверка слоя domains
|
||||
|
||||
На ревью определяется:
|
||||
|
||||
- соответствует ли ответственность модуля предметной роли слоя `domains`;
|
||||
- не разделена ли одна область на соседние модули без самостоятельных владельцев;
|
||||
- не объединены ли в одном модуле несвязанные предметные области;
|
||||
- остаются ли страницы, маршруты и UI нескольких предметных ответственностей в `compositions`;
|
||||
- остаются ли самостоятельные технические сервисы без предметной модели в `infra`.
|
||||
Reference in New Issue
Block a user