mirror of
https://github.com/gromlab-ru/slm-design.git
synced 2026-08-22 07:30:16 +03:00
76 lines
4.7 KiB
Markdown
76 lines
4.7 KiB
Markdown
---
|
||
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. Представить принятое решение папками, файлами и публичными точками входа.
|