FSD-MSD

0

Описание

пример структуры приложения FSD-MSD

Языки

  • TypeScript100%
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
README.md

Структура проекта по слоям:

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

Важное

- Каждый слой (Pages, Widgets, Features, Entities) имеет одинаковую семантику вложенных папок

- Утилиты, логика внутри сущностей и виджетов документируется

- Рекомендуемый размер файла кода не более 70 строк, необходимо все что мапится, выносить в отдельные компоненты

- Родитель и ребенок не могут быть на одном уровне вложенности