mirror of
https://github.com/gromlab-ru/slm-design.git
synced 2026-08-22 07:30:16 +03:00
103 lines
5.5 KiB
Markdown
103 lines
5.5 KiB
Markdown
|
|
# Правила 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
|
|||
|
|
|
|||
|
|
> **Жизненный цикл ресурсов**
|
|||
|
|
>
|
|||
|
|
> Для каждого ресурса жизненного цикла модуль-владелец определяет создание, область жизни, число экземпляров и очистку; ресурс активен только внутри своей области жизни.
|