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