План
Общий обзор структуры проекта
Единицей структурирования основной массы исходников приложения является бандл (можно называть и модуль, но специальное название более чётко отделяет это понятие от обычного js-файла, который тоже называют модулем) — определённым образом структурированная директория исходников, “решающая” определённую общую задачу.
Структура бандла не диктуется фреймворком и является исключительно конвенциональной, но от этого не менее обязательной. Бандлы могут быть вложенными и составлять некую произвольную иерархию, которая, как правило, отражает иерархию интерфейса приложения.
Следующие имена поддиректорий бандла являются “зарезервированными”:
actions/ — содержит экшн-креаторы (action-creators) для redux. Модули и классы в этой папке должны содержать
суффикс Actions (например, actions/photoActions.ts).actionTypes/ (deprecated) — директория для объявления глобальных констант и типов для redux-actions. Ввиду
очень узкого назначения, решено отказаться от таких папок в пользу types.api/ — сервисы по низкоуровневому взаимодействию с бекендом. Слой, реализующий непосредственно REST-API запросы
к нужным энд-поинтам с нужными параметрами.components/ — в этой папке должны располагаться все компоненты, которые занимаются представлением (view-слой).
Эти компоненты не должны заниматься бизнес-логикой, а лишь отображением текущего состояния, полученного
из redux и relay плюс пробросом пользовательских событий.containers/ — higher-order-компоненты, которые не занимаются отображением, а являются прослойкой для подготовки
данных и колбеков, реализующих бизнес-логику, для view-компонентов. Зачастую, располагаются в корневом бандле
common и являются общими для web- и мобильного приложения.models/ — описания типов и различных валидаций моделей данных, получаемых от бекенда.mutations/ — классы relay-мутаций.reducers/ — описание типов для глобального redux-состояния и redux-редьюсеров.services/ — классы сервисов общего назначения.types/ — содержит файлы с описанием общих констант и типов для каких-либо задач в рамках бандла (далёкий аналог
.h-файлов в C++), включая описание actionTypes для redux. Названия файлов в этой директории должны содержать
суффикс Types (например, types/photoTypes.ts).utils/ — вспомогательные функции (утилиты) локального значения для бандла. Утилиты должны быть stateless.В корневой папке бандла также могут располагаются различные файлы конфигурации/документации, например:
routes.tsx — конфигурация роутов для react-router.configSchema.ts — схема для конфиграционного файла convict.*Module.ts — модули с описанием сервисов для нашей DI-библиотеки ts-guice.README.md — общее описание предназначения бандла.Примечание
В простых случаях подпапки с зарезервированными названиями models, reducers, types и utils
могут быть представленны в виде одиночного файла в корне бандла с таким же названием, например types.ts.
Подпапки бандла с другими названиями должны восприниматься как вложенные бандлы и иметь аналогичную структуру.