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

98 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Правила 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
> **Проверка контракта бизнес-логики**
>
> Каждый публичный предметный сценарий проверяется через фабрику с управляемыми тестовыми реализациями портов; основные тесты адаптера, сборки и модуля фреймворка проверяют собственные границы и не повторяют набор предметных сценариев.