2026-07-24 22:34:49 +03:00
---
title: Слои
status: draft
normative: true
---
# Слои
Слой определяет вид ответственности, допустимые зависимости и типы modules внутри верхнеуровневой папки `src` .
## Матрица ответственности
| Слой | Владеет | Н е владеет |
|---|---|---|
2026-07-25 15:49:31 +03:00
| [`app` ](./app.md ) | Framework routes, bootstrap, глобальные framework boundaries | Product UI, product logic, page state, application wiring |
| [`compositions` ](./compositions.md ) | Pages, layouts, screens, widgets, product flows, application wiring и scope | Universal UI primitives, technical transports |
| [`infra` ](./infra.md ) | Technical services, transports, platform integrations | Product semantics и application wiring |
2026-07-24 22:34:49 +03:00
| [`ui` ](./ui.md ) | Product-agnostic UI modules | Product scenarios и data sources |
| [`shared` ](./shared.md ) | Детерминированные общие resources | Runtime state, I/O и product knowledge |
## Общие правила
2026-07-25 15:49:31 +03:00
**SLM-LAY-001 - ОБЯЗАН.** Module должен располагаться в слое, который владеет е г о основной ответственностью.
2026-07-24 22:34:49 +03:00
**SLM-LAY-002 - ЗАПРЕЩЕНО.** Нельзя выбирать слой по техническому типу файла без определения владельца поведения и данных.
**SLM-LAY-003 - ОБЯЗАН.** Межслойный import должен одновременно соответствовать общей dependency direction и public API импортируемого module.
**SLM-LAY-004 - ЗАПРЕЩЕНО.** Нельзя создавать proxy module в разрешённом слое только для обхода запрещённого направления import.
2026-07-25 15:49:31 +03:00
**SLM-LAY-005 - СЛЕДУЕТ.** При смешанной ответственности module следует разделить по реальным владельцам. Application flow и UI нескольких самостоятельных modules следует собирать в `compositions` .
2026-07-24 22:34:49 +03:00
## Выбор слоя
| Вопрос | Слой |
|---|---|
| Код существует только из-за framework route/bootstrap? | `app` |
2026-07-25 15:49:31 +03:00
| Код собирает page, route или несколько самостоятельных modules? | `compositions` |
| Код выражает product flow или product responsibility без owner, введённого overlay? | `compositions` |
| Код предоставляет technical capability приложения? | `infra` |
| Компонент не содержит product semantics и scenario? | `ui` |
2026-07-24 22:34:49 +03:00
| Код детерминирован, не знает продукт и не имеет runtime state? | `shared` |
2026-07-25 15:49:31 +03:00
Overlay может добавлять собственный слой и изменять ownership только в явно объявленном delta.