Files
slm-design/DRAFT/level-1/layers.md

5.0 KiB
Raw Blame History

Слои 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.