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

8.7 KiB
Raw Blame History

Терминология Level 2

Нормативные определения рабочего черновика. Этот раздел не объявляет правила.

Level 2 наследует терминологию Level 1, сохраняет порядок app → compositions → domains → infra → ui → shared и заменяет доменный модуль новой контейнерной сущностью.

Доменный пакет

Самостоятельная контейнерная предметная граница слоя domains, представляющая одну доменную ответственность. Доменный пакет не является модулем или Group. Он объединяет SLM-модули и Groups одной предметной области, но не имеет собственного исполняемого кода, состояния, жизненного цикла, публичного API или узла графа зависимостей.

Корень пакета может содержать только декларативную metadata, обязательный модуль business и допустимые Groups. Metadata хранит статические данные о пакете, владении либо конфигурации проверки и не содержит кода, выполняемого приложением, сборщиком или проверяющим инструментом.

Навигационная Group слоя domains

Group, размещённая непосредственно в слое domains или другой такой Group. На Level 2 она классифицирует доменные пакеты и другие навигационные Groups, но не содержит исполняемый код и не образует dependency boundary.

Модуль доменного пакета

Обычный SLM-модуль внутри доменного пакета. Его ответственность относится к одной роли пакета: business, preset, adapter или framework binding. Каждый такой модуль имеет отдельную папку, публичный API и узел графа зависимостей.

Модуль внутри Group пакета не является вложенным модулем, потому что его ближайшая внешняя граница не является модулем.

Business

Модуль business

Обязательный SLM-модуль business, который определяет публичные предметные сценарии, DomainApi, одну фабрику, типы зависимостей и публичный контракт доменных ошибок.

business является единственным runtime-источником, через который приложение получает доменные данные, состояние и результаты сценариев. Он не зависит от конкретного фреймворка, среды или технической реализации.

Business-safe внешний пакет

Внешняя библиотека, допустимая в import-графе business: детерминированная, environment-neutral, не выполняющая ввод-вывод и не владеющая изменяемым состоянием или runtime capability. SDK, generated client, storage, state manager, framework и техническая интеграция не становятся business-safe только из-за совместимости с несколькими средами.

DomainApi

Единый публичный runtime-контракт домена, экземпляр которого создаёт фабрика business. Все presets одной предметной области создают API этого контракта и не добавляют собственные предметные методы.

Фабрика business

Единственная публичная функция business, которая получает явные зависимости и создаёт экземпляр DomainApi. Фабрика не выбирает конкретный preset и не определяет среду выполнения.

Доменная ошибка

Безопасная публичная форма ожидаемого сбоя предметного сценария. Модуль business объявляет устойчивые коды, тип ошибки и runtime guard. Ошибки SDK, транспорта, storage, адаптера или другого домена не являются доменными ошибками текущего API.

Техническая сборка

Adapter

Код, который связывает явную зависимость фабрики с SDK, storage, API платформы, данными запроса или техническим сервисом. Adapter может быть закрытым сегментом preset-модуля либо самостоятельным модулем в Group adapters.

Точная обязательная форма технических портов пока не определена и остаётся открытым вопросом Level 2.

Preset

SLM-модуль в Group presets, который создаёт DomainApi для одного именованного контекста выполнения: браузера, запроса, server action или другого реального окружения. Он выбирает технические реализации и передаёт фабрике готовые runtime-зависимости.

Архитектура не устанавливает минимальное или максимальное количество presets и не требует универсального изоморфного preset.

Framework binding

Framework Group

Group доменного пакета, названная по конкретному фреймворку: react, vue и аналогично. Она содержит framework binding modules, не имеет собственного index.ts, реализации, состояния, жизненного цикла или публичного API.

Framework binding module

SLM-модуль внутри Framework Group, ответственность которого ограничена domain-specific интеграцией с фреймворком. Например, react/session может владеть Provider и hooks сессии, а react/login-form — переиспользуемой формой авторизации.

Framework binding module получает готовый DomainApi, не вызывает фабрику или preset и не импортирует framework-состояние, hooks или компоненты другого доменного пакета.

Сборка графа

Место сборки графа

Код модуля composition, точки входа app, request handler или test setup, который создаёт нужные экземпляры DomainApi в ацикличном порядке и передаёт уже созданные API последующим presets. Место сборки не становится владельцем предметных или технических ответственностей модулей. Подробный lifecycle собранного графа пока не нормирован Level 2.

Граница среды выполнения

Граница между import-графами, предназначенными для клиента, сервера или обеих сред. Она определяется транзитивной достижимостью импортов, а не только именем папки или tree shaking.

Структурная модель

SLM root
└── domains
    └── доменный пакет
        ├── metadata
        ├── модуль business
        ├── Group presets
        │   └── preset-модуль
        ├── Group adapters
        │   └── adapter-модуль
        └── Framework Group react
            ├── модуль session
            └── модуль login-form