Files
slm-design/DRAFT/architecture/validation.md
S. Gromov 691069af8e sync
2026-08-10 09:12:22 +03:00

4.5 KiB
Raw Blame History

Проверка 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.