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

6.5 KiB
Raw Blame History

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

Проект Level 3 соблюдает правила Level 1 и Level 2, кроме заменённого SLM-L2-DOMAIN-R001 и расширенного состава групп внутри слоя domains, а также дополнительные правила этого реестра.

Граница домена

SLM-L3-DOMAIN-R001

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

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

SLM-L3-DOMAIN-A002

Корень домена

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

Бизнес-логика и фабрика

SLM-L3-BUSINESS-R003

Контракт бизнес-логики

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

SLM-L3-BUSINESS-A004

Независимость бизнес-логики от среды

Граф импортов, достижимый из публичной точки входа business, не достигает кода фреймворков, зависимых от среды точек входа, API платформы, технических реализаций, адаптеров, сборок или модулей фреймворков.

SLM-L3-FACTORY-R005

Контракт фабрики

Фабрика бизнес-логики получает полный набор собственных портов и создаёт API одного и того же контракта независимо от среды выполнения; различия сред не выражаются режимом, необязательным портом или методом, намеренно недоступным в части сред.

SLM-L3-FACTORY-R006

Создание экземпляра API

Вызов фабрики не выполняет ввод-вывод, не читает скрытое окружение, не запускает ресурс жизненного цикла, не выбирает конкретный адаптер и не выполняет операции жизненного цикла фреймворка.

SLM-L3-PORT-R007

Порт бизнес-логики

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

Сборка

SLM-L3-ADAPTER-R008

Ответственность адаптера

Адаптер реализует порт бизнес-логики поверх конкретной технической системы и не определяет предметный инвариант, резервное поведение или ошибку предметной области.

SLM-L3-PRESET-R009

Роль типовой сборки

Модуль группы presets собирает API бизнес-логики для одного именованного контекста выполнения, выбирая реализации портов, и не изменяет контракт или предметные сценарии.

SLM-L3-ASSEMBLY-R010

Жизненный цикл собранного API

Владелец графа удерживает экземпляр API только в области жизни, объявленной модулем-владельцем, и вызывает предоставленные операции жизненного цикла; модуль-владелец определяет создание, область жизни, число экземпляров и очистку ресурса по правилам Level 1.

Междоменные зависимости и среды выполнения

SLM-L3-DEPENDENCY-R011

Междоменная связь во время выполнения

Модуль business одного домена не создаёт и не импортирует исполняемый API другого домена; необходимая возможность описывается собственным портом и передаётся владельцем графа при сборке.

SLM-L3-ENVIRONMENT-A012

Совместимость графа импортов

Публичная точка входа, обозначенная как клиентская, серверная или общая для обеих сред, не импортирует и не реэкспортирует код несовместимой среды выполнения.

Фреймворки и тестирование

SLM-L3-FRAMEWORK-R013

Модуль фреймворка домена

Зависящий от конкретного фреймворка код находится в модуле домена, названном именем фреймворка, получает готовый API бизнес-логики и не реализует предметные решения или технические адаптеры.

SLM-L3-TEST-R014

Проверка контракта бизнес-логики

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