mirror of
https://github.com/gromlab-ru/slm-design.git
synced 2026-08-22 07:30:16 +03:00
44 lines
3.3 KiB
Markdown
44 lines
3.3 KiB
Markdown
# Модули Level 1
|
||
|
||
> Пояснение нормативной модели модулей Level 1.
|
||
|
||
Модуль является основной архитектурной единицей SLM. Он размещается в отдельной папке, но может состоять только из публичной точки входа и одного файла реализации.
|
||
|
||
## Связанные правила
|
||
|
||
- [`SLM-L1-MODULE-A004`](../rules/level-1.md#slm-l1-module-a004)
|
||
- [`SLM-L1-MODULE-A014`](../rules/level-1.md#slm-l1-module-a014)
|
||
- [`SLM-L1-MODULE-R006`](../rules/level-1.md#slm-l1-module-r006)
|
||
- [`SLM-L1-MODULE-R011`](../rules/level-1.md#slm-l1-module-r011)
|
||
- [`SLM-L1-MODULE-R012`](../rules/level-1.md#slm-l1-module-r012)
|
||
|
||
## Владение
|
||
|
||
Каждая самостоятельная ответственность имеет одного модуля-владельца. Модуль определяет её публичный API, зависимости, состояние, область жизни и внутреннее устройство независимо от того, в каком файле выполняется конкретный код.
|
||
|
||
Точки входа `app` и нормативные ресурсы `shared` являются единственными немодульными исключениями. Остальной код внутри SLM root либо принадлежит существующему модулю, либо образует новый модуль.
|
||
|
||
## Публичный API
|
||
|
||
Модуль предоставляет один логический публичный API. Конкретное имя точки входа и механизм экспорта определяет стайлгайд проекта.
|
||
|
||
Внешний код использует модуль только через публичный API. Сам API открывает только контракт, необходимый реальным внешним потребителям; внутренние механизмы, изменяемое состояние и детали жизненного цикла остаются закрытыми.
|
||
|
||
## Внутреннее устройство
|
||
|
||
Модуль может содержать корневые файлы, сегменты, компоненты и [вложенные модули](./nested-modules.md). Внутри своей границы он может использовать относительные импорты и не обязан обращаться к собственному публичному API; точную форму внутренних импортов определяет стайлгайд.
|
||
|
||
SLM не требует полного каркаса или обязательного каталога сегментов.
|
||
|
||
## Визуальный модуль
|
||
|
||
Визуальный модуль обычно имеет корневой компонент, который экспортируется через публичный API.
|
||
|
||
```text
|
||
button/
|
||
├── button.tsx
|
||
└── index.ts
|
||
```
|
||
|
||
Корневой компонент остаётся компонентом, а владельцем ответственности является модуль `button`.
|