FSD-MSD
Описание
пример структуры приложения FSD-MSD
Языки
- TypeScript100%
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
README.md
Структура проекта по слоям:
- App
- Назначение: Слой для инициализации приложения. Содержит: роутинг, провайдеры контекста/store, хуки настроек, хуки первого рендера и так далее
- Содержимое:
- routes - роутинг проекта, страницы берутся только из слоя Pages
- hooks - хуки для инициализации проекта
- locale - все локализации проекта, импортируется из слоя Entities
- Entities
- Назначение: Здесь хранятся бизнес-сущности — основные модели и их логика, без UI сущностей. Содержит: Определения сущностей имеет модульный подход, для быстрого отделения их в другой проект.
- Запрещено:
- нет UI компонентов
- стор не готовит данные для отображения
- стор работает с данными сервера, а так же хранит необходимые сущности для реализации логики фронта
- Содержимое:
│ │ ├── config/ все конфиги для реализации логики
│ │ ├── DTO/ все типы для взаимодействия с бекендом
│ │ ├── types/ все типы для внутреннего использования
│ │ ├── lib/ утилиты, которые требуются использовать внутри данной сущности
│ │ ├── api/ все необходимые вызовы API для данной сущности
│ │ ├── store/ стор по сущности, далее по нему будет подробный раздел
- Features
- Назначение: Модули, которые реализуют конкретные пользовательские действия. Содержит: Только UI сущности, которые сами решают в каком виде появится и что сделать при вызове, например кнопки, ссылки более сложные компоненты
- Название - в начале всегда глагол
- Запрещено - кастомные хуки не допускаются
- Содержит:
├── _components/ компоненты которые будут использованы в рамках фичи или скопа фичей (ui/src/features/sidebar/footer - пример)
- Shared
- Назначение: Общий слой, содержит тему проекта и то что может быть использовано в другом проекте
- Содержит:
├── components/ - все простые компоненты проекта, не привязаны не к какой логике проекта
├── api/ - базовая настройка слоя взаимодействия (например настройка axios)
├── theme/ - провайдер темы библиотеки, без которых не могут существовать ui компоненты
├── hooks/ - общие хуки приложения (useDebounse, useoutsideClick), именно те хуки, которые могут быть переиспользованы в других проектах
├── lib/ - утилиты (например копирование значения в буфер, работа с local storage)
├── "@types"/ - декораторы типов
- Pages
- Назначение: Собирает все компоненты, чтобы сформировать страницы приложения. Содержит: Страницы, которые используют только widgets компоненты, с редким исключением логику из Entities
- Widgets
- Назначение: Крупные, повторяющиеся блоки, которые можно переиспользовать на разных страницах или только на одной. Содержит: Модули с логикой и UI (например, блоки новостей, карусели).
- Сomposition
- Назначение: Общий слой всего проекта, для возможного использования во всех слоях
- Содержимое:
├── ui/ - сложные компоненты, которые могут быть переиспользованы в разных местах проекта
├── layer/ - слои для формирования расположения компонентов
├── settings/ - настройки проекта, общие для всех, таймеры, фича тоглы и так далее