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

3.8 KiB
Raw Blame History

Слои Level 2

Пояснение нормативной модели слоёв Level 2.

Level 2 добавляет domains между продуктовой композицией и техническими сервисами приложения.

Базовая структура

src/
├── app/
├── compositions/
├── domains/
├── infra/
├── ui/
└── shared/

Отсутствующая роль не требует пустой папки. Проект без самостоятельной доменной ответственности может оставаться на Level 1.

Роли слоёв

Слой Роль
app Запуск, маршруты, преобразование входных данных и подключение готовых публичных API
compositions Страницы, макеты, экраны, виджеты и конкретные продуктовые композиции
domains Предметные области, их модели, правила, сценарии и продуктовое состояние
infra Технические сервисы и возможности приложения без самостоятельной предметной модели
ui Универсальные модули интерфейса без зависимости от конкретной продуктовой композиции
shared Независимый детерминированный фундамент без знания о продукте, состояния и ввода-вывода

Порядок слоёв

app
 ↓
compositions
 ↓
domains
 ↓
infra
 ↓
ui
 ↓
shared

Код слоя может импортировать модули своего или любого нижнего слоя. Промежуточные слои можно пропускать.

Слой Может импортировать другие слои
app compositions, domains, infra, ui, shared
compositions domains, infra, ui, shared
domains infra, ui, shared
infra ui, shared
ui shared
shared Нет

Импорты между модулями одного слоя разрешены. Поэтому один доменный модуль может зависеть от публичного API другого доменного модуля, если общий граф остаётся ацикличным.

Границы ролей

compositions определяет устройство конкретной страницы, маршрута или визуального результата. domains определяет повторяемую предметную семантику, которая не принадлежит одной композиции.

infra предоставляет техническую возможность. Если код определяет продуктовую модель, правило или сценарий поверх этой возможности, владельцем такого кода является доменный модуль.

Разрешённый импорт не переносит владение. Доменный модуль может использовать infra и ui, но технический сервис и универсальный интерфейс сохраняют собственных владельцев.

Связанные правила