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