--- title: Архитектура папок icon: folder-tree info: Подробное рассмотрение нашей архитектуры папок --- В этом руководстве вы изучите детали структуры каталога проекта и то, как она способствует организации и сопровождаемости Twenty. Следуя этому соглашению об архитектуре папок, легче находить файлы, связанные с конкретными функциями, и обеспечивать масштабируемость и поддерживаемость приложения. ``` front └───modules │ └───module1 │ │ └───submodule1 │ └───module2 │ └───ui │ │ └───display │ │ └───inputs │ │ │ └───buttons │ │ └───... └───pages └───... ``` ## Страницы Включает компоненты высокого уровня, определенные маршрутами приложения. Они импортируют более низкоуровневые компоненты из папки модулей (подробности ниже). ## Модули Каждый модуль представляет собой функционал или группу функций, содержащий свои специфические компоненты, состояния и операционную логику. Все они должны следовать структуре ниже. Вы можете вложить модули в модули (называются подмодулями), и те же правила будут применяться. ``` module1 └───components │ └───component1 │ └───component2 └───constants └───contexts └───graphql │ └───fragments │ └───queries │ └───mutations └───hooks │ └───internal └───states │ └───selectors └───types └───utils ``` ### Контексты Контекст — это способ передачи данных через дерево компонентов без необходимости передавать props вручную на каждом уровне. См. [React Context](https://react.dev/reference/react#context-hooks) для более подробной информации. ### GraphQL Включает фрагменты, запросы и мутации. См. [GraphQL](https://graphql.org/learn/) для более подробной информации. * Фрагменты Фрагмент — это переиспользуемая часть запроса, которую можно использовать в разных местах. Используя фрагменты, легче избежать дублирования кода. См. [GraphQL Fragments](https://graphql.org/learn/queries/#fragments) для более подробной информации. * Запросы См. [GraphQL Queries](https://graphql.org/learn/queries/) для более подробной информации. * Мутации См. [GraphQL Mutations](https://graphql.org/learn/queries/#mutations) для более подробной информации. ### Хуки См. [Hooks](https://react.dev/learn/reusing-logic-with-custom-hooks) для более подробной информации. ### Состояния Содержит логику управления состоянием. [Jotai](https://jotai.org) этим управляет. * Селекторы: Производные атомы (с использованием `createAtomSelector`) вычисляют значения из других атомов и автоматически мемоизируются. Встроенное управление состоянием в React все еще управляет состоянием внутри компонента. ### Утилиты Должны содержать только переиспользуемые чистые функции. В противном случае создайте пользовательские хуки в папке `hooks`. ## Пользовательский интерфейс Содержит все переиспользуемые компоненты пользовательского интерфейса, используемые в приложении. Эта папка может содержать подкаталоги, такие как `data`, `display`, `feedback` и `input` для конкретных типов компонентов. Каждый компонент должен быть автономным и переиспользуемым, чтобы вы могли использовать его в разных частях приложения. Разделяя компоненты пользовательского интерфейса от других компонентов в папке `modules`, легче поддерживать согласованность дизайна и вносить изменения в пользовательский интерфейс, не затрагивая другие части (бизнес-логику) кодовой базы. ## Интерфейс и зависимости Вы можете импортировать код других модулей из любого модуля, кроме папки `ui`. Это позволит упростить тестирование его кода. ### Внутренний Каждая часть (хуки, состояния, ...) модуля может иметь внутреннюю папку, содержащую части, которые используются только внутри модуля.