4.5 KiB
Проверка SLM
Граница автоматической проверки и архитектурного ревью SLM.
Автоматическая проверка
Проект, заявляющий соответствие SLM, сопоставляет физические пути с SLM root, слоями, модулями, Groups, вложенными модулями, публичными фасетами, точками входа app и ресурсами shared. Такое сопоставление задаётся стайлгайдом или конфигурацией проверки и не изменяет нормативный смысл сущностей.
Каждое правило класса A должно быть реализовано проверкой проекта и блокировать её при нарушении. SLM не навязывает конкретный инструмент.
Скрипт draft-rules.js проверяет только целостность документов: формат и уникальность кодов, ссылки и наличие тематических упоминаний. Он не проверяет архитектуру приложения.
Актуальный список правил скрипт получает из канонического реестра.
Архитектурное ревью
Правила класса 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.