6.1 KiB
Правила SLM первого уровня
Здесь собраны правила первого уровня. Это единственное место, где они формулируются; тематические черновики объясняют их и ссылаются на коды.
Размещение кода по слоям
SLM-L1-LAYER-R001
Назначение слоёв
Код внутри SLM root размещается в слое, нормативная роль которого соответствует ответственности этого кода.
SLM-L1-LAYER-A002
Направление зависимостей
Внутри одного SLM root код каждого слоя может зависеть только от кода этого же или любого нижнего слоя в нормативном порядке слоёв выбранного уровня SLM.
SLM-L1-LAYER-R003
Граница слоя
appВ
appразмещаются только точки входа фреймворка для запуска, маршрутов, преобразования входных данных и подключения публичных API нижних модулей или ресурсовshared; ответственности нижних слоёв остаются за пределамиapp.
Границы модулей
SLM-L1-MODULE-A004
Публичный API модуля
Каждый модуль предоставляет единый публичный API; код за пределами модуля импортирует его содержимое только через этот API.
SLM-L1-MODULE-A014
Папка модуля
Каждый модуль размещается в отдельной папке; его публичный API и внутренняя реализация находятся внутри этой границы, а вложенные модули образуют собственные папки.
SLM-L1-MODULE-R006
Ответственность модуля
Одна модульная граница содержит код одной связной ответственности; части, которые изменяются по несвязанным причинам, размещаются в разных модулях.
SLM-L1-MODULE-R011
Владелец ответственности
Каждая самостоятельная ответственность и относящийся к ней код принадлежат ровно одному модулю; вне модульной границы допускаются только точки входа
appи нормативные ресурсыshared.
SLM-L1-MODULE-R012
Состав публичного API
Публичный API модуля открывает только контракт, необходимый реальным внешним потребителям; детали реализации и изменяемые внутренние механизмы остаются закрытыми.
Зависимости между модулями
SLM-L1-DEPENDENCY-A005
Циклические зависимости
Граф зависимостей модулей внутри одного SLM root, включая вложенные модули, не содержит циклов.
Назначение групп
SLM-L1-GROUP-R007
Назначение группы
Группа содержит только модули и другие группы, не владеет файлами реализации, состоянием, жизненным циклом или публичным API и не импортируется внешним кодом.
Назначение сегментов
SLM-L1-SEGMENT-R008
Граница сегмента
Сегмент организует код только внутри одного модуля и не имеет собственной ответственности, публичного API или узла графа зависимостей.
Ответственность компонентов
SLM-L1-COMPONENT-R009
Ответственность компонента
Компонент реализует часть ответственности одного родительского модуля; все его зависимости, состояние и жизненный цикл принадлежат этому модулю и не образуют самостоятельную архитектурную границу.
Границы вложенных модулей
SLM-L1-NESTED_MODULE-A010
Доступ к вложенному модулю
Код за пределами родительского модуля не импортирует вложенный модуль напрямую и получает его экспорты только через публичный API родителя.
Жизненный цикл
SLM-L1-LIFECYCLE-R013
Жизненный цикл ресурсов
Для каждого ресурса жизненного цикла модуль-владелец определяет создание, область жизни, число экземпляров и очистку; ресурс активен только внутри своей области жизни.
Граница доменных модулей
SLM-L1-DOMAIN-R015
Доменный модуль
Каждая самостоятельная предметная область слоя
domainsпредставлена ровно одним доменным модулем; принадлежащие ей модели, правила, сценарии и продуктовое состояние размещаются внутри его границы, включая границы вложенных модулей.