# Модули 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`.