Files
slm-design/docs2/specification/layers/index.md

3.0 KiB
Raw Blame History

title, status, normative
title status normative
Слои draft true

Слои

Слой определяет вид ответственности, допустимые зависимости и типы modules внутри верхнеуровневой папки src.

Матрица ответственности

Слой Владеет Не владеет
app Framework routes, bootstrap, глобальные framework boundaries Product UI, domain logic, page state, graph assembly
compositions Pages, layouts, screens, widgets, cross-domain graph, scope Domain model, domain adapters, universal UI primitives
domains Product model, scenarios, ports, adapters, runtime surfaces Route/page composition и UI нескольких domains
infra Technical services, transports, platform integrations Product semantics и domain graph
ui Product-agnostic UI modules Product scenarios и data sources
shared Детерминированные общие resources Runtime state, I/O и product knowledge

Общие правила

SLM-LAY-001 - ОБЯЗАН. Модуль должен располагаться в слое, который владеет его основной ответственностью.

SLM-LAY-002 - ЗАПРЕЩЕНО. Нельзя выбирать слой по техническому типу файла без определения владельца поведения и данных.

SLM-LAY-003 - ОБЯЗАН. Межслойный import должен одновременно соответствовать общей dependency direction и public API импортируемого module.

SLM-LAY-004 - ЗАПРЕЩЕНО. Нельзя создавать proxy module в разрешённом слое только для обхода запрещённого направления import.

SLM-LAY-005 - СЛЕДУЕТ. При смешанной ответственности module следует разделить по реальным владельцам. Cross-module и cross-domain orchestration следует выполнить в compositions; связь business с собственными adapters выполняется assembly соответствующего domain.

Выбор слоя

Вопрос Слой
Код существует только из-за framework route/bootstrap? app
Код собирает page, route, несколько modules или domains? compositions
Код выражает продуктовую модель, сценарий или domain UI? domains
Код предоставляет техническую capability приложения? infra
Компонент не содержит product semantics и сценария? ui
Код детерминирован, не знает продукт и не имеет runtime state? shared