6.2 KiB
title, status, normative
| title | status | normative |
|---|---|---|
| Терминология | draft | true |
Терминология
Слой
Layer - верхнеуровневая зона src, определяющая вид ответственности и допустимые направления зависимостей.
SLM использует слои app, compositions, domains, infra, ui и shared.
Модуль
Module - минимальный самостоятельный владелец ответственности с public boundary. Модуль может содержать код разных технических типов, если весь этот код принадлежит одной ответственности.
Группа
Group - навигационная папка, классифицирующая модули или другие группы. Группа не является модулем, не имеет public API и не владеет runtime.
Домен
Domain - конечный продуктовый модуль в слое domains, владеющий одной предметной ответственностью и всеми её runtime surfaces.
Допустимые пути:
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.
Graph 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.
Segment
Segment - внутренняя папка модуля, группирующая файлы по роли, например hooks, services, types, styles или lib.
Domain zones не являются обычными segments.
Компонент
Component - presentation unit внутри владеющего module. Компонент не является самостоятельным архитектурным owner и не выбирает источники данных или runtime dependencies.
Продуктовые данные
Product data - данные, состояние и outcomes, имеющие смысл в предметной области продукта. Transport DTO, raw SDK response и browser storage schema не являются доменной моделью автоматически.
Runtime dependency
Runtime dependency - dependency, необходимая выполняемому коду: API другого объекта, external source, store, query runtime, event source, clock, environment или platform capability.
import type не создаёт runtime dependency, но может создавать статическую связанность contracts.