50 lines
2.8 KiB
Markdown
50 lines
2.8 KiB
Markdown
---
|
||
title: Архитектура
|
||
---
|
||
|
||
# Архитектура
|
||
|
||
Архитектура построена на FSD (Feature‑Sliced Design) и строгих границах модулей.
|
||
Цель — разделить ответственность, упростить сопровождение и контроль зависимостей.
|
||
|
||
## Принципы
|
||
|
||
- Разделять UI, бизнес-логику и инфраструктуру.
|
||
- Держать зависимости однонаправленными.
|
||
- Открывать наружу только публичный API модулей.
|
||
- Не допускать циклических зависимостей.
|
||
|
||
## Слои
|
||
|
||
- **app** — инициализация приложения, роутинг, конфигурации, глобальные провайдеры.
|
||
- **screens** — экраны и их композиция.
|
||
- **layouts** — каркас и шаблоны страниц.
|
||
- **widgets** — крупные блоки интерфейса, собирающие несколько сценариев.
|
||
- **features** — отдельные пользовательские действия и сценарии.
|
||
- **entities** — бизнес-сущности и их модель.
|
||
- **shared** — переиспользуемая инфраструктура, утилиты и базовые UI‑компоненты.
|
||
|
||
## Правила зависимостей
|
||
|
||
- Допустимые импорты идут сверху вниз: `app → screens → layouts → widgets → features → entities → shared`.
|
||
- Импорты между слоями — через публичный API.
|
||
- Внутри одного слоя — относительные импорты.
|
||
|
||
## Публичный API модулей
|
||
|
||
- Каждый модуль экспортирует наружу только то, что нужно другим слоям.
|
||
- Внешние импорты идут только через `index`‑файл модуля.
|
||
- Внутренние файлы не импортируются напрямую извне.
|
||
|
||
## Границы ответственности
|
||
|
||
- Бизнес‑логика не размещается в UI‑компонентах.
|
||
- UI‑компоненты должны быть максимально простыми и предсказуемыми.
|
||
- Связь между независимыми сценариями поднимается на уровень выше.
|
||
|
||
## Типовые ошибки
|
||
|
||
- Импорт из более высокого слоя в более низкий.
|
||
- Смешивание логики нескольких слоёв в одном модуле.
|
||
- Прямые импорты внутренних файлов, минуя публичный API.
|