Files
slm-design/docs/README.md

76 lines
4.7 KiB
Markdown
Raw Normal View History

2026-08-10 09:12:22 +03:00
---
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. Представить принятое решение папками, файлами и публичными точками входа.