Aprende a organizar tu proyecto Angular con una estructura de carpetas efectiva que incluye core, features y shared. Mejora la mantenibilidad y escalabilidad de tus aplicaciones con esta guía práctica.
Organizar un proyecto Angular de manera efectiva es crucial para su mantenibilidad y escalabilidad a largo plazo. Una estructura de carpetas bien definida no solo ayuda a mantener el código limpio y ordenado, sino que también facilita la colaboración y la expansión del proyecto. En esta guía, exploraremos una estructura de carpetas escalable que incluye las carpetas core, features y shared, y discutiremos cómo cada una de ellas contribuye a la organización del proyecto.
Al iniciar un proyecto Angular, es importante establecer una estructura de carpetas que permita un crecimiento y mantenimiento eficientes. Este artículo te guiará a través de una estructura de carpetas recomendada, describiendo el propósito de cada carpeta y ofreciendo consejos sobre cómo mantener tu proyecto organizado. Una estructura clara no solo facilita el trabajo diario sino que también mejora la colaboración en equipo y reduce el tiempo de incorporación de nuevos desarrolladores.
Una estructura de carpetas básica para un proyecto Angular bien organizado podría verse así:
src/
├── app/
│ ├── core/
│ ├── features/
│ ├── shared/
│ ├── assets/
│ ├── environments/
│ └── app.module.ts
├── assets/
├── environments/
├── styles/
└── main.ts
Desglose de la Estructura
La carpeta core está destinada a contener elementos que son esenciales para el funcionamiento de la aplicación y que generalmente son utilizados en todo el proyecto.
Los servicios ubicados en core/services contienen la lógica empresarial y las funciones que manejan la comunicación con la API. Al centralizar estos servicios, se asegura que todas las partes de la aplicación accedan a los mismos métodos y datos.
Ejemplo de estructura:
core/
└── services/
├── auth.service.ts
├── user.service.ts
└── data.service.ts
Los interceptors en core/interceptors se utilizan para modificar las solicitudes HTTP, por ejemplo, añadiendo tokens de autenticación o manejando errores globales. Esto ayuda a mantener el código relacionado con las solicitudes HTTP en un solo lugar.
Ejemplo de estructura:
core/
└── interceptors/
├── auth.interceptor.ts
└── error.interceptor.ts
Las guardias en core/guards se utilizan para proteger rutas y gestionar la navegación basada en permisos. Por ejemplo, se puede tener una guardia para asegurarse de que solo los usuarios autenticados puedan acceder a ciertas rutas.
Ejemplo de estructura:
core/
└── guards/
├── auth.guard.ts
└── admin.guard.ts
La carpeta features contiene módulos y componentes específicos de funcionalidades particulares de la aplicación. Cada funcionalidad principal debe tener su propio módulo, lo que permite que el código relacionado con una característica específica se agrupe y se maneje de manera más eficiente.
Cada módulo en features debe representar una funcionalidad completa y autónoma de la aplicación. Esto facilita la carga diferida (lazy loading) y la separación de preocupaciones.
Ejemplo de estructura:
features/
└── user/
├── user.component.ts
├── user.service.ts
└── user.module.ts
Dentro de cada módulo de funcionalidad, se incluyen los componentes específicos a esa funcionalidad. Esto ayuda a mantener el código organizado y facilita la navegación y el mantenimiento.
Ejemplo de estructura:
features/
└── admin/
├── admin.component.ts
├── admin-dashboard/
│ ├── admin-dashboard.component.ts
│ └── admin-dashboard.component.html
└── admin.module.ts
La carpeta shared contiene elementos que se utilizan en múltiples lugares de la aplicación. Estos elementos deben ser genéricos y reutilizables para maximizar su utilidad en diferentes contextos.
Los componentes compartidos se encuentran en shared/components y son aquellos que pueden ser reutilizados en diferentes partes de la aplicación. Ejemplos típicos incluyen botones personalizados, cuadros de diálogo y formularios.
Ejemplo de estructura:
shared/
└── components/
├── button/
│ ├── button.component.ts
│ └── button.component.html
├── modal/
│ ├── modal.component.ts
│ └── modal.component.html
└── form/
├── form.component.ts
└── form.component.html
Las directivas compartidas se ubican en shared/directives y permiten añadir comportamientos a elementos del DOM. Ejemplos incluyen directivas para validación de formularios o para la manipulación del DOM.
Ejemplo de estructura:
shared/
└── directives/
├── highlight.directive.ts
└── autofocus.directive.ts
Los pipes en shared/pipes transforman los datos en las plantillas de Angular. Ejemplos incluyen pipes para formatear fechas, monedas o para transformar textos.
Ejemplo de estructura:
shared/
└── directives/
├── highlight.directive.ts
└── autofocus.directive.ts
Aquí hay un ejemplo más detallado de cómo se vería una estructura de proyecto utilizando estas carpetas:
src/
├── app/
│ ├── core/
│ │ ├── services/
│ │ │ ├── auth.service.ts
│ │ │ ├── user.service.ts
│ │ │ └── data.service.ts
│ │ ├── interceptors/
│ │ │ ├── auth.interceptor.ts
│ │ │ └── error.interceptor.ts
│ │ └── guards/
│ │ ├── auth.guard.ts
│ │ └── admin.guard.ts
│ ├── features/
│ │ ├── user/
│ │ │ ├── user.component.ts
│ │ │ ├── user.service.ts
│ │ │ └── user.module.ts
│ │ ├── admin/
│ │ │ ├── admin.component.ts
│ │ │ ├── admin-dashboard/
│ │ │ │ ├── admin-dashboard.component.ts
│ │ │ │ └── admin-dashboard.component.html
│ │ │ └── admin.module.ts
│ ├── shared/
│ │ ├── components/
│ │ │ ├── button/
│ │ │ │ ├── button.component.ts
│ │ │ │ └── button.component.html
│ │ │ ├── modal/
│ │ │ │ ├── modal.component.ts
│ │ │ │ └── modal.component.html
│ │ │ └── form/
│ │ │ ├── form.component.ts
│ │ │ └── form.component.html
│ │ ├── directives/
│ │ │ ├── highlight.directive.ts
│ │ │ └── autofocus.directive.ts
│ │ └── pipes/
│ │ ├── date-format.pipe.ts
│ │ └── currency-format.pipe.ts
│ ├── assets/
│ ├── environments/
│ └── app.module.ts
├── assets/
├── environments/
├── styles/
└── main.ts
Una estructura de carpetas bien organizada es fundamental para el éxito de un proyecto Angular a largo plazo. Utilizando las carpetas core, features y shared, puedes crear una base sólida que facilite el mantenimiento y la escalabilidad de tu aplicación. Implementar estas prácticas te ayudará a mantener tu código limpio y ordenado, mejorando tanto la colaboración como la eficiencia en el desarrollo.
Siguiendo estas recomendaciones, estarás en camino de construir aplicaciones Angular más robustas y sostenibles.