mirror of
https://github.com/gromlab-ru/slm-design.git
synced 2026-08-22 07:30:16 +03:00
feat: Добавить уровни сложности архитектуры
This commit is contained in:
@@ -6,107 +6,56 @@ normative: true
|
||||
|
||||
# Терминология
|
||||
|
||||
## Base SLM
|
||||
|
||||
**Base SLM** - самостоятельная минимальная архитектура, применяемая без дополнительного overlay.
|
||||
|
||||
## Overlay
|
||||
|
||||
**Overlay** - независимое опциональное нормативное расширение, применяемое непосредственно поверх base SLM. Overlay не наследует правила другого overlay.
|
||||
|
||||
## Слой
|
||||
|
||||
**Layer** - верхнеуровневая зона `src`, определяющая вид ответственности и допустимые направления зависимостей.
|
||||
|
||||
SLM использует слои `app`, `compositions`, `domains`, `infra`, `ui` и `shared`.
|
||||
Base SLM использует слои `app`, `compositions`, `infra`, `ui` и `shared`.
|
||||
|
||||
## Модуль
|
||||
|
||||
**Module** - минимальный самостоятельный владелец ответственности с public boundary. Модуль может содержать код разных технических типов, если весь этот код принадлежит одной ответственности.
|
||||
|
||||
## Product owner
|
||||
|
||||
**Product owner** - module, владеющий product semantics, model, behavior, data boundary и public API одной ответственности.
|
||||
|
||||
## Группа
|
||||
|
||||
**Group** - навигационная папка, классифицирующая модули или другие группы. Группа не является модулем, не имеет public API и не владеет runtime.
|
||||
|
||||
## Домен
|
||||
|
||||
**Domain** - конечный продуктовый модуль в слое `domains`, владеющий одной предметной ответственностью и всеми её runtime surfaces.
|
||||
|
||||
Допустимые пути:
|
||||
|
||||
```text
|
||||
domains/{domain}
|
||||
domains/{group...}/{domain}
|
||||
```
|
||||
|
||||
## Группа доменов
|
||||
|
||||
**Domain group** - группа внутри `domains`, используемая только для навигации. Например, `knv` в пути `domains/knv/auth` является группой, если не имеет собственного public API, состояния и assembly.
|
||||
|
||||
## Зона домена
|
||||
|
||||
**Domain zone** - внутренняя архитектурная часть domain с отдельным направлением зависимостей. Базовые зоны: `business`, `react`, `adapters`, `client`, `server`.
|
||||
|
||||
Зона не является самостоятельным domain.
|
||||
|
||||
## Business
|
||||
|
||||
**Business** - framework-neutral зона domain, владеющая моделью, правилами, ports, сценариями, состоянием, нормализацией и domain errors. Business создаёт public logic runtime через factory.
|
||||
|
||||
## Factory
|
||||
|
||||
**Factory** - side-effect-free constructor, принимающий явные dependencies и возвращающий public business runtime API.
|
||||
|
||||
## DomainRuntime
|
||||
|
||||
**DomainRuntime** - созданный factory экземпляр доменного поведения. Он предоставляет commands, queries, snapshots, subscriptions и lifecycle operations, необходимые конкретному domain.
|
||||
|
||||
Factory создаёт DomainRuntime. DomainRuntime является публичным шлюзом к данным и поведению domain.
|
||||
|
||||
## Port
|
||||
|
||||
**Port** - business-owned contract внешней capability, необходимой domain. Port описывается языком domain и не раскрывает concrete SDK, transport или framework runtime.
|
||||
|
||||
## Adapter
|
||||
|
||||
**Adapter** - concrete реализация port поверх infra, SDK, storage, platform API, framework runtime или другого внешнего механизма.
|
||||
|
||||
Готовая capability одного DomainRuntime, структурно удовлетворяющая port другого domain, является cross-domain runtime dependency, а не concrete adapter автоматически. Wrapper adapter требуется только при реальном преобразовании contracts.
|
||||
|
||||
## Framework surface
|
||||
|
||||
**Framework surface** - API domain для конкретного UI/framework runtime. Для React он может включать runtime access boundary, hooks, Providers и domain UI.
|
||||
|
||||
Framework surface не является параллельным business API и не обращается к external source в обход DomainRuntime.
|
||||
|
||||
## Assembly
|
||||
|
||||
**Assembly** - связывание factory с concrete adapters и runtime-specific input для создания готового runtime одного domain.
|
||||
|
||||
## Composition
|
||||
|
||||
**Composition** - модуль, связывающий готовые modules и domain runtimes в page, route, layout, screen, widget или другой application flow.
|
||||
**Composition** - product module, связывающий public APIs и technical capabilities в page, route, layout, screen, widget или другой application flow.
|
||||
|
||||
## Graph owner
|
||||
## Scope owner
|
||||
|
||||
**Graph owner** - composition, request setup или test setup, которое выбирает набор runtime instances, порядок их создания, lifecycle scope и cleanup.
|
||||
|
||||
## Domain runtime Provider
|
||||
|
||||
**Domain runtime Provider** - часть framework surface, передающая готовый runtime instance framework consumers одного domain. Она не является владельцем cross-domain graph автоматически.
|
||||
|
||||
## Provider composition
|
||||
|
||||
**Provider composition** - composition module, создающий или получающий несколько runtimes и монтирующий их framework boundaries в выбранном scope.
|
||||
**Scope owner** - composition, request setup, provider setup или test setup, которое выбирает runtime instances и resources, их lifetime, activation и cleanup.
|
||||
|
||||
## Segment
|
||||
|
||||
**Segment** - внутренняя папка модуля, группирующая файлы по роли, например `hooks`, `services`, `types`, `styles` или `lib`.
|
||||
|
||||
Domain zones не являются обычными segments.
|
||||
|
||||
## Компонент
|
||||
|
||||
**Component** - presentation unit внутри владеющего module. Компонент не является самостоятельным архитектурным owner и не выбирает источники данных или runtime dependencies.
|
||||
**Component** - presentation unit внутри владеющего module. Компонент не является самостоятельным архитектурным owner и не выбирает application dependencies самостоятельно.
|
||||
|
||||
## Продуктовые данные
|
||||
|
||||
**Product data** - данные, состояние и outcomes, имеющие смысл в предметной области продукта. Transport DTO, raw SDK response и browser storage schema не являются доменной моделью автоматически.
|
||||
**Product data** - данные, состояние и outcomes, имеющие смысл в предметной области продукта. Transport DTO, raw SDK response и browser storage schema не являются product model автоматически.
|
||||
|
||||
## Runtime dependency
|
||||
|
||||
**Runtime dependency** - dependency, необходимая выполняемому коду: API другого объекта, external source, store, query runtime, event source, clock, environment или platform capability.
|
||||
|
||||
`import type` не создаёт runtime dependency, но может создавать статическую связанность contracts.
|
||||
|
||||
Термины, вводимые `SLM Advanced` или `SLM Pro`, определяются и имеют нормативную силу только внутри соответствующего overlay.
|
||||
|
||||
Reference in New Issue
Block a user