Organizar archivos y directorios dentro de un proyecto de React es crucial para la mantenibilidad, escalabilidad y facilidad de navegación. Este artículo explora la arquitectura general y las estructuras de carpetas en diferentes escalas de proyectos React, proporcionando demostraciones claras para cada nivel.
Esta estructura se caracteriza por su simplicidad: agrupar los archivos por su tipo:
└── src/
├── assets/
├── api/
├── configs/
├── components/
│ ├── SignUpForm.tsx
│ ├── Employees.tsx
│ ├── PaymentForm.tsx
│ └── Button.tsx
├── hooks/
│ ├── usePayment.ts
│ ├── useUpdateEmployee.ts
│ ├── useEmployees.ts
│ └── useAuth.tsx
├── lib/
├── services/
├── states/
└── utils/
Supongamos que tienes mucho código relacionado con pagos. Un día, todo el negocio cambia o ya no es necesario, ¿qué tan fácil es reemplazarlo o eliminarlo? Con esta estructura de carpetas, tendrás que revisar cada carpeta y los archivos dentro de ella para hacer los cambios necesarios. Y si el proyecto sigue creciendo, pronto se convertirá en un infierno de mantenimiento que solo empeorará con el tiempo.
A medida que los proyectos crecen, la estructura de "Nivel 2" introduce la agrupación por características dentro de cada tipo:
└── src/
├── assets/
├── api/
├── configs/
├── components/
│ ├── auth/
│ │ └── SignUpForm.tsx
│ ├── payment/
│ │ └── PaymentForm.tsx
│ ├── common/
│ │ └── Button.tsx
│ └── employees/
│ ├── EmployeeList.tsx
│ └── EmployeeSummary.tsx
├── hooks/
│ ├── auth/
│ │ └── useAuth.ts
│ ├── payment/
│ │ └── usePayment.ts
│ └── employees/
│ ├── useEmployees.ts
│ └── useUpdateEmployee.ts
├── lib/
├── services/
├── states/
└── utils/
Volviendo al problema de modificar o eliminar el módulo de pagos, con esta estructura es mucho más fácil hacerlo.
La estructura de carpetas de "Nivel 2" es la que recomendaría si no sabes qué elegir.
Para proyectos más grandes, la estructura de "Nivel 3" ofrece un enfoque altamente modular, definiendo límites claros para diferentes aspectos de la aplicación dentro de cada módulo:
└── src/
├── assets/
├── modules/
| ├── core/
│ │ ├── components/
│ │ ├── design-system/
│ │ │ └── Button.tsx
│ │ ├── hooks/
│ │ ├── lib/
│ │ └── utils/
│ ├── payment/
│ │ ├── components/
│ │ │ └── PaymentForm.tsx
│ │ ├── hooks/
│ │ │ └── usePayment.ts
│ │ ├── lib/
│ │ ├── services/
│ │ ├── states/
│ │ └── utils/
│ ├── auth/
│ │ ├── components/
│ │ │ └── SignUpForm.tsx
│ │ ├── hooks/
│ │ │ └── useAuth.ts
│ │ ├── lib/
│ │ ├── services/
│ │ ├── states/
│ │ └── utils/
│ └── employees/
│ ├── components/
│ │ ├── EmployeeList.tsx
│ │ └── EmployeeSummary.tsx
│ ├── hooks/
│ │ ├── useEmployees.ts
│ │ └── useUpdateEmployee.ts
│ ├── services/
│ ├── states/
│ └── utils/
└── ...
Con esta estructura, si necesitas eliminar o modificar la lógica de pagos, sabrás inmediatamente por dónde empezar.
Independientemente del nivel de estructura, ciertos nombres de carpetas deben tener significados específicos. Lo que un nombre de carpeta significa puede variar según tus preferencias o las convenciones del proyecto.
Esto es lo que suelo pensar sobre los nombres de las carpetas:
export const MINUTES_PER_HOUR = 60
).
Elegir la estructura de carpetas adecuada en proyectos React es esencial y debe basarse en el tamaño y complejidad del proyecto. Mientras que el "Nivel 1" puede ser suficiente para proyectos pequeños, los "Niveles 2" y "3" ofrecen estructuras más organizadas y modulares para proyectos medianos y grandes. Personalmente, a menudo recomendaría la estructura de carpetas de "Nivel 2". Además, comprender los nombres comunes de las carpetas ayuda a mantener una arquitectura coherente e intuitiva en las aplicaciones React.
Jorge García
Fullstack developer