Skip to content

Структура проекта

Раздел описывает базовую структуру проекта и принципы организации модулей на уровне папок и файлов.

Базовая структура проекта

Хорошо

text
src/
├── app/                  # Инициализация приложения, роутинг, провайдеры
│   ├── config/           # Конфигурации и константы уровня приложения
│   ├── providers/        # Провайдеры и обёртки приложения
│   ├── routing/          # Конфигурация маршрутов
│   └── index.ts          # Публичный API слоя
├── screens/              # Экраны приложения
│   └── Profile/          # Экран профиля
│       └── ...           # ui/model/index.ts
├── layouts/              # Общие шаблоны и каркасы страниц
│   └── MainLayout/       # Основной layout
│       └── ...           # ui/index.ts
├── widgets/              # Крупные блоки интерфейса
│   └── Header/           # Виджет шапки
│       └── ...           # ui/index.ts
├── features/             # Пользовательские сценарии
│   └── auth-by-email/    # Авторизация по email
│       └── ...           # ui/model/api/index.ts
├── entities/             # Бизнес-сущности
│   └── user/             # Сущность пользователя
│       └── ...           # ui/model/api/lib/index.ts
└── shared/               # Общие ресурсы проекта
    ├── ui/               # Базовые UI-компоненты
    ├── lib/              # Утилиты и хелперы
    ├── services/         # Общие сервисы и клиенты
    ├── config/           # Общие конфигурации
    ├── styles/           # Глобальные стили и токены
    └── assets/           # Ресурсы
        ├── images/       # Изображения
        ├── icons/        # Иконки
        ├── fonts/        # Шрифты
        └── video/        # Видео

Плохо

text
// Плохо: слои смешаны, нет понятных границ и публичного API.
src/
├── components/
├── api/
├── styles/
└── user.ts

Правила организации

  • Каждый слой и модуль хранится в собственной папке.
  • Внутренние реализации разделяются на ui, model, lib, api.
  • Публичный API модуля объявляется в index.ts.
  • Внутренние файлы не импортируются напрямую извне.
  • Не смешивать ответственность разных слоёв в одном модуле.