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

8.0 KiB
Raw Blame History

Правила SLM второго уровня

Проект Level 2 соблюдает правила Level 1 и дополнительные правила этого реестра. SLM-L1-DOMAIN-R015 заменяется правилами доменного пакета. SLM-L1-GROUP-R007 сохраняется для Groups внутри пакета и вне слоя domains, а для навигационных Groups слоя domains заменяется SLM-L2-GROUP-R004. Ранее использовавшийся номер SLM-L2-DOMAIN-R001 не переиспользуется после изменения модели уровней.

Граница доменного пакета

SLM-L2-DOMAIN-R002

Предметная граница пакета

Каждая самостоятельная предметная область слоя domains представлена ровно одним доменным пакетом; все его модули относятся только к этой предметной области.

SLM-L2-DOMAIN-A003

Корень доменного пакета

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

SLM-L2-GROUP-R004

Навигационная Group доменов

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

Business и DomainApi

SLM-L2-BUSINESS-R005

Модуль business

Каждый доменный пакет содержит ровно один модуль business, который владеет публичными предметными сценариями и контрактом DomainApi этой предметной области.

SLM-L2-BUSINESS-R006

Единственный runtime-источник домена

Приложение получает доменные данные, состояние и результаты предметных сценариев только через экземпляр DomainApi; adapters, presets и framework binding modules не предоставляют параллельный runtime-источник этих данных или результатов.

SLM-L2-BUSINESS-A007

Импортная замкнутость business

Все runtime- и type-only импорты business, кроме междоменных зависимостей по SLM-L2-DEPENDENCY-A012, ведут только к файлам этого модуля, объявленным environment-neutral ресурсам shared и внешним пакетам, объявленным как business-safe.

SLM-L2-FACTORY-R008

Единая фабрика DomainApi

Модуль business предоставляет ровно одну публичную фабрику, которая получает явные runtime-зависимости и создаёт DomainApi одного контракта независимо от preset и среды выполнения.

Ошибки домена

SLM-L2-ERROR-R009

Публичный контракт ошибок

Модуль business экспортирует устойчивые коды доменных ошибок, именованный readonly-тип безопасной публичной формы и runtime guard этой формы независимо от выбранного способа передачи ошибки.

SLM-L2-ERROR-R010

Изоляция исходных ошибок

Сбой adapter, SDK, транспорта, storage или другого домена, доступный приложению через DomainApi, представлен только безопасной ошибкой собственного доменного контракта и не раскрывает исходный объект, тип, message, status, payload или cause.

Presets и зависимости

SLM-L2-PRESET-R011

Роль preset

Каждый preset является SLM-модулем одного именованного контекста выполнения, выбирает реализации явных зависимостей, вызывает единственную business-фабрику и не добавляет предметные сценарии, методы DomainApi или собственные доменные ошибки.

SLM-L2-DEPENDENCY-A012

Междоменные импорты

Модуль одного доменного пакета не импортирует runtime-экспорты другого пакета, включая функции, состояние, hooks, contexts, Providers и components; разрешён только type-only импорт публичного business-контракта, который остаётся ребром общего ацикличного графа.

SLM-L2-ENVIRONMENT-A013

Совместимость среды выполнения

Публичная точка входа, обозначенная как client-, server- или shared-entry point, не импортирует и не реэкспортирует код несовместимой среды выполнения во всём достижимом графе импортов.

Framework Groups и тестирование

SLM-L2-FRAMEWORK-R014

Framework Group домена

Framework binding modules доменного пакета размещаются в Group, названной по фреймворку, и каждый прямой дочерний элемент этой Group является framework binding module.

SLM-L2-FRAMEWORK-R015

Framework binding module

Модуль внутри Framework Group владеет одной domain-specific framework-ответственностью, получает готовый DomainApi и не выполняет business-сборку, не выбирает adapters и не владеет страницей, маршрутом или multi-domain композицией.

SLM-L2-TEST-R016

Проверка владельцев Level 2

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

Миграция

SLM-L2-MIGRATION-A017

Изоляция форм во время миграции

Пока SLM root содержит одновременно доменные модули Level 1 и доменные пакеты Level 2, модули этих двух форм не создают между собой runtime- или type-only импортов.

Внешние библиотеки business

SLM-L2-BUSINESS-R018

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

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