Files
slm-design/DRAFT/level-2/terminology.md
2026-07-30 20:48:05 +03:00

11 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

Три объявленных entry points одного логического публичного API модуля business:

Путь Содержимое
business Только public types, включая DomainApi, зависимости, factory type, DomainError и DomainErrorCode
business/factory Единственная runtime-фабрика DomainApi
business/error Runtime-коды и guards доменных ошибок

Фасеты не являются сегментами, вложенными модулями или самостоятельными узлами графа. Любой другой внешний путь внутрь business является deep import.

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.

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

Техническая зависимость

Явная runtime-возможность, необходимая business-фабрике и требующая production-реализации поверх SDK, storage, API платформы, данных запроса или технического сервиса. Type-only cross-domain API dependency, неизменяемая конфигурация и аргумент отдельного предметного сценария не являются техническими зависимостями.

Adapter

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

Group adapters обязательна и непуста, если фабрика имеет техническую зависимость. Фабрика без технических зависимостей не требует создания этой Group.

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

Preset

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

Каждый доменный пакет содержит минимум один preset. Архитектура не ограничивает их максимальное количество и не требует универсального изоморфного 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 preset-модулям либо напрямую зависимым business-фабрикам. Место сборки не становится владельцем предметных или технических ответственностей модулей. Подробный lifecycle собранного графа пока не нормирован Level 2.

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

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

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

SLM root
└── domains
    └── доменный пакет
        ├── metadata
        ├── модуль business
        ├── обязательная Group presets
        │   └── preset-модуль
        ├── Group adapters при наличии технических зависимостей
        │   └── adapter-модуль
        └── Framework Group react
            ├── модуль session
            └── модуль login-form