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

98 lines
6.5 KiB
Markdown
Raw Normal View History

2026-07-30 13:22:45 +03:00
# Правила SLM третьего уровня
Проект Level 3 соблюдает правила Level 1 и Level 2, кроме заменённого `SLM-L2-DOMAIN-R001` и расширенного состава групп внутри слоя `domains`, а также дополнительные правила этого реестра.
2026-07-30 13:22:45 +03:00
## Граница домена
2026-07-30 13:22:45 +03:00
### SLM-L3-DOMAIN-R001
> **Предметная граница домена**
2026-07-30 13:22:45 +03:00
>
> Каждая самостоятельная предметная область слоя `domains` представлена ровно одним доменом; его модули относятся только к этой области.
2026-07-30 13:22:45 +03:00
### SLM-L3-DOMAIN-A002
> **Корень домена**
2026-07-30 13:22:45 +03:00
>
> Корень домена не содержит файлов реализации, изменяемого состояния, ресурсов жизненного цикла, публичного API или реэкспортов и содержит только допустимые модули домена и группы.
2026-07-30 13:22:45 +03:00
## Бизнес-логика и фабрика
2026-07-30 13:22:45 +03:00
### SLM-L3-BUSINESS-R003
> **Контракт бизнес-логики**
2026-07-30 13:22:45 +03:00
>
> Каждый домен содержит ровно один модуль `business`, который определяет публичные предметные сценарии и контракты, ошибки предметной области и модель её состояния.
2026-07-30 13:22:45 +03:00
### SLM-L3-BUSINESS-A004
> **Независимость бизнес-логики от среды**
2026-07-30 13:22:45 +03:00
>
> Граф импортов, достижимый из публичной точки входа `business`, не достигает кода фреймворков, зависимых от среды точек входа, API платформы, технических реализаций, адаптеров, сборок или модулей фреймворков.
2026-07-30 13:22:45 +03:00
### SLM-L3-FACTORY-R005
> **Контракт фабрики**
2026-07-30 13:22:45 +03:00
>
> Фабрика бизнес-логики получает полный набор собственных портов и создаёт API одного и того же контракта независимо от среды выполнения; различия сред не выражаются режимом, необязательным портом или методом, намеренно недоступным в части сред.
2026-07-30 13:22:45 +03:00
### SLM-L3-FACTORY-R006
> **Создание экземпляра API**
2026-07-30 13:22:45 +03:00
>
> Вызов фабрики не выполняет ввод-вывод, не читает скрытое окружение, не запускает ресурс жизненного цикла, не выбирает конкретный адаптер и не выполняет операции жизненного цикла фреймворка.
2026-07-30 13:22:45 +03:00
### SLM-L3-PORT-R007
> **Порт бизнес-логики**
2026-07-30 13:22:45 +03:00
>
> Каждая возможность среды, необходимая бизнес-логике во время выполнения, описывается минимальным портом этой бизнес-логики; публичный контракт порта не раскрывает конкретную реализацию, фреймворк или типы среды.
2026-07-30 13:22:45 +03:00
## Сборка
2026-07-30 13:22:45 +03:00
### SLM-L3-ADAPTER-R008
> **Ответственность адаптера**
2026-07-30 13:22:45 +03:00
>
> Адаптер реализует порт бизнес-логики поверх конкретной технической системы и не определяет предметный инвариант, резервное поведение или ошибку предметной области.
2026-07-30 13:22:45 +03:00
### SLM-L3-PRESET-R009
> **Роль типовой сборки**
2026-07-30 13:22:45 +03:00
>
> Модуль группы `presets` собирает API бизнес-логики для одного именованного контекста выполнения, выбирая реализации портов, и не изменяет контракт или предметные сценарии.
2026-07-30 13:22:45 +03:00
### SLM-L3-ASSEMBLY-R010
> **Жизненный цикл собранного API**
2026-07-30 13:22:45 +03:00
>
> Владелец графа удерживает экземпляр API только в области жизни, объявленной модулем-владельцем, и вызывает предоставленные операции жизненного цикла; модуль-владелец определяет создание, область жизни, число экземпляров и очистку ресурса по правилам Level 1.
2026-07-30 13:22:45 +03:00
## Междоменные зависимости и среды выполнения
2026-07-30 13:22:45 +03:00
### SLM-L3-DEPENDENCY-R011
> **Междоменная связь во время выполнения**
2026-07-30 13:22:45 +03:00
>
> Модуль `business` одного домена не создаёт и не импортирует исполняемый API другого домена; необходимая возможность описывается собственным портом и передаётся владельцем графа при сборке.
2026-07-30 13:22:45 +03:00
### SLM-L3-ENVIRONMENT-A012
> **Совместимость графа импортов**
2026-07-30 13:22:45 +03:00
>
> Публичная точка входа, обозначенная как клиентская, серверная или общая для обеих сред, не импортирует и не реэкспортирует код несовместимой среды выполнения.
2026-07-30 13:22:45 +03:00
## Фреймворки и тестирование
2026-07-30 13:22:45 +03:00
### SLM-L3-FRAMEWORK-R013
> **Модуль фреймворка домена**
2026-07-30 13:22:45 +03:00
>
> Зависящий от конкретного фреймворка код находится в модуле домена, названном именем фреймворка, получает готовый API бизнес-логики и не реализует предметные решения или технические адаптеры.
2026-07-30 13:22:45 +03:00
### SLM-L3-TEST-R014
> **Проверка контракта бизнес-логики**
2026-07-30 13:22:45 +03:00
>
> Каждый публичный предметный сценарий проверяется через фабрику с управляемыми тестовыми реализациями портов; основные тесты адаптера, сборки и модуля фреймворка проверяют собственные границы и не повторяют набор предметных сценариев.