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

5.5 KiB
Raw Blame History

Правила SLM первого уровня

Здесь собраны правила первого уровня. Это единственное место, где они формулируются; тематические черновики объясняют их и ссылаются на коды.

Размещение кода по слоям

SLM-L1-LAYER-R001

Назначение слоёв

Код внутри SLM root размещается в слое, нормативная роль которого соответствует ответственности этого кода.

SLM-L1-LAYER-A002

Направление зависимостей

Внутри одного SLM root код каждого слоя может зависеть только от кода этого же или любого нижнего слоя в порядке app → compositions → infra → ui → shared.

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

Жизненный цикл ресурсов

Для каждого ресурса жизненного цикла модуль-владелец определяет создание, область жизни, число экземпляров и очистку; ресурс активен только внутри своей области жизни.