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.
|