--- layout: home title: SLM Design description: Архитектура фронтенд-приложений с явным владением ответственностями hero: name: SLM Design text: Архитектура владения ответственностями tagline: Сначала определяется ответственность и её владелец. Слои, группы, модули и сегменты выражают уже принятое архитектурное решение. image: src: /logo.svg alt: SLM Design actions: - theme: brand text: Изучить архитектуру link: /architecture/ - theme: alt text: Открыть правила link: /rules/registry features: - title: Ответственность раньше структуры details: Модуль появляется из самостоятельной ответственности, а не из размера каталога, количества файлов или выбранного фреймворка. - title: Явная структурная модель details: Слой определяет роль, группа классифицирует модули, модуль владеет ответственностью, сегмент организует реализацию. - title: Проверяемые границы details: Публичные API, направление зависимостей и правила жизненного цикла делают архитектурное решение наблюдаемым и проверяемым. --- SLM Design (Scoped Layered Module Design) — структурная архитектура фронтенд-приложений, основанная на явном владении ответственностями. Архитектурное решение начинается не с папки или имени файла. Сначала определяется ответственность, затем её владелец, роль владельца в приложении и только после этого физическое размещение кода. ## Основа SLM использует четыре структурных понятия: 1. **Слой** классифицирует код по архитектурной роли и ограничивает направление зависимостей. 2. **Группа** помогает классифицировать модули внутри слоя, но ничего не реализует и ничем не владеет. 3. **Модуль** владеет самостоятельной ответственностью, её публичным API, зависимостями, состоянием и жизненным циклом. 4. **Сегмент** организует внутреннее содержимое одного модуля и не создаёт нового владельца. ```text Слой → [Группа*] → Модуль → [Сегмент*] ``` Знак `*` означает, что элементов может не быть или их может быть несколько. Группы могут быть вложены друг в друга внутри одного слоя. Сегменты всегда остаются внутри одного модуля. ## Документация ### Архитектура - [Обзор архитектуры](./architecture/) - [Слои](./architecture/layers.md) - [Модули](./architecture/modules.md) - [Сегменты](./architecture/segments.md) ### Правила - [Как устроены правила](./rules/) - [Реестр правил](./rules/registry.md) ### Справочные материалы - [Терминология](./reference/terminology.md) - [Проверка архитектуры](./reference/validation.md) ## Порядок принятия решения 1. Сформулировать ответственность без упоминания папок, файлов и библиотек. 2. Назначить одного владельца ответственности. 3. Выбрать слой по роли владельца. 4. Определить публичный контракт, зависимости, состояние и жизненный цикл. 5. Организовать реализацию сегментами, если это упрощает навигацию. 6. Представить принятое решение папками, файлами и публичными точками входа.