5.0 KiB
Слои Level 1
Пояснение нормативной модели слоёв Level 1.
Базовая структура
src/
├── app/
├── compositions/
├── infra/
├── ui/
└── shared/
src/ здесь является примером SLM root. Фактическую границу определяет устройство приложения.
Отсутствующая в проекте роль не требует пустой папки. Слой является доступной архитектурной ролью, а не обязательным элементом каркаса.
Роли слоёв
App
app связывает приложение с фреймворком: запускает его, объявляет маршруты, преобразует входные данные и подключает публичные API нижних модулей или ресурсы shared. Файлы app являются точками входа фреймворка, а не модулями SLM.
Точка входа может напрямую использовать compositions, infra, ui или shared, если зависимость разрешена общим порядком слоёв. Такое использование не переносит ответственность нижнего модуля в app.
Compositions
compositions содержит продуктовый интерфейс: страницы, макеты, экраны, виджеты, точки входа и другие композиционные модули. Внутреннюю группировку слоя определяет проект.
Infra
infra содержит технические сервисы приложения: аналитику, локализацию, тему, телеметрию и другие возможности среды выполнения без самостоятельной доменной модели.
UI
ui содержит универсальные модули интерфейса, которые не зависят от конкретной страницы или продуктовой композиции.
Shared
shared содержит независимый детерминированный фундамент без знания о продукте, изменяемого состояния и ввода-вывода.
В shared допускаются обычные модули и специальные немодульные ресурсы: небольшие чистые утилиты, общие типы, стили, конфигурация и статические файлы. Ресурс не имеет самостоятельной ответственности, публичного API или жизненного цикла и может импортироваться напрямую по пути, установленному стайлгайдом.
Если ресурсу нужны самостоятельная ответственность, собственные архитектурные зависимости, несколько файлов реализации, изменяемое состояние, ввод-вывод или область жизни, он оформляется как модуль. Каталог ресурсов не реэкспортирует модули и не используется для обхода их публичных API.
Порядок слоёв
app
↓
compositions
↓
infra
↓
ui
↓
shared
Код слоя может импортировать модули своего или любого нижнего слоя. Промежуточные слои можно пропускать.
| Слой | Может импортировать нижние слои |
|---|---|
app |
compositions, infra, ui, shared |
compositions |
infra, ui, shared |
infra |
ui, shared |
ui |
shared |
shared |
Нет |
Импорты внутри слоя, публичный API и циклы описаны отдельно в Зависимостях.
Связанные правила
Граница Level 1
Разрешённый импорт не переносит владение. Например, infra может использовать ui, но продуктовый интерфейс по-прежнему принадлежит compositions.
Самостоятельная доменная модель или сценарий являются сигналом рассмотреть Level 2, а не расширять ответственность shared или infra.