Files
slm-design/docs/README.md
S. Gromov 691069af8e sync
2026-08-10 09:12:22 +03:00

76 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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. Представить принятое решение папками, файлами и публичными точками входа.