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