¿Proyecto Standalone o Proyecto Modular de Angular?

Una de las mayores dudas a la hora de trabajar con Angular (sobre todo a partir de la versión 17) es si debemos construir nuestro proyecto con un enfoque modular clásico o con un enfoque monolítico. El esquema modular tiene la ventaja de estructurar la aplicación en módulos agrupados en función de similitudes técnicas o funcionales, lo que facilita la comprensión del proyecto. El esquema standalone (o monolítico), por contra, elimina la necesidad de esa división en módulos, lo que da como resultado una simplificación notable del desarrollo del proyecto.

 

 

Y ahora te estarás preguntando, pero entonces, ¿qué es mejor, un enfoque modular o un enfoque standalone? Pues, en líneas generales, la recomendación es emplear el enfoque standalone en los proyectos sencillos y el enfoque modular en los proyectos más complejos. Por supuesto, siempre habrá una línea difusa en las aplicaciones de complejidad media, eso es inevitable, pero así tendremos una directriz básica a la hora de seleccionar el esquema de nuestro desarrollo.


Dicho lo anterior, a continuación vamos a comentar algunas nociones básicas de las características de ambas tipologías de proyecto. Aunque estas son las dos formas principales de trabajar con proyectos web, hay que decir que, a partir de la versión 17 de Angular, la creación de un proyecto se hará por defecto con esquema standalone. Por tanto, si queremos construir un proyecto modular, tendremos que indicarlo específicamente en el momento de lanzar su creación.

 

Proyecto Modular de Angular

 

Este tipo de proyecto modular (que es el tipo de proyecto clásico en Angular) implica dividir la aplicación en módulos más pequeños y especializados. Estas cajas especializadas pueden contener componentes, servicios y otros elementos relacionados entre sí.

 

En este enfoque, cada módulo puede funcionar como una entidad independiente con su propia lógica y características. Resulta evidente que esto es particularmente útil para aplicaciones más grandes y complejas donde la modularidad facilita el mantenimiento, la reutilización y la escalabilidad. 

 

La estructura clásica de este tipo de proyectos es:

src/
|-- app/
|   |-- module-1/
|   |   |-- componentes/
|   |   |-- servicios/
|   |   |-- ...
|   |
|   |-- module-2/
|   |   |-- componentes/
|   |   |-- servicios/
|   |   |-- ...
|   |
|   |-- ...
|-- assets/
|-- ...


Para crear un proyecto modular tenemos que lanzar una instrucción como la siguiente en la línea de comandos de Angular CLI (esta es la opción por defecto para Angular 16 y versiones anteriores).

ng new hello-world --prefix hw --no-standalone


Proyecto Monolítico de Angular

 

En cambio, un proyecto standalone o monolítico en Angular es aquel en el que toda la lógica y funcionalidad de la aplicación reside en un único lugar sin divisiones significativas en módulos.

 

En este tipo de proyecto, todos los componentes, servicios, directivas, y otros elementos están organizados directamente en la carpeta "app". Al contrario que los modulares, los proyectos standalone pueden ser más adecuados para aplicaciones pequeñas o implementaciones más simples.

 

La estructura de este tipo de proyectos sería más sencilla, algo así como:

src/
|-- app/
|   |-- componentes/
|   |-- servicios/
|   |-- ...
|-- assets/
|-- ...

 

Para crear un proyecto modular tenemos que lanzar una instrucción como la siguiente en la línea de comandos de Angular CLI (esta es la opción por defecto para Angular 17 y versiones posteriores).

ng new hello-world --prefix hw --standalone

 

 

¿Enfoque Modular o enfoque Standalone?

 

Dicho lo anterior, la elección entre un proyecto standalone y un proyecto basado en módulos dependerá de la naturaleza y el tamaño de tu aplicación, así como de tus preferencias de diseño y mantenimiento del código. En proyectos grandes y complejos, la modularidad suele ser una opción más escalable y mantenible. En cambio, en una app sin demasiadas consultas, lo mejor sería recurrir a un esquema monolítico.

 

Aunque no hay una metodología única para realizar la selección, a la hora de elegir entre una y otra opción, a grandes rasgos podríamos basarnos en los siguientes puntos de decisión:

 

  • Tamaño del Proyecto: Para aplicaciones más pequeñas o proyectos menos complejos, un enfoque standalone puede ser más adecuado. La modularidad puede introducir cierta complejidad que no es necesaria en un contexto más simple. Sin embargo, en proyectos grandes y complejos, la modularidad puede ser esencial. Permite organizar el código en partes más manejables, facilita la reutilización y mantiene la estructura del proyecto más limpia y escalable.

  • Escalabilidad: Un enfoque modular facilita la escalabilidad. Puedes agregar o modificar módulos sin afectar el resto de la aplicación, lo que es beneficioso a medida que la aplicación crece.

  • Mantenimiento: La modularidad facilita el mantenimiento. Cada módulo puede tener su propio conjunto de responsabilidades, haciendo que sea más fácil encontrar y corregir problemas o agregar nuevas características.

  • Reutilización de código: Si planeas reutilizar ciertas partes de tu aplicación en diferentes contextos, la modularidad es clave. Los módulos encapsulan funcionalidades específicas que pueden ser reutilizadas en diferentes partes de la aplicación o incluso en otros proyectos.
  • División de Responsabilidades: En equipos grandes, donde diferentes desarrolladores pueden estar trabajando en diferentes partes de la aplicación, la modularidad facilita la colaboración. Cada equipo o desarrollador puede ser responsable de un módulo específico.
  • Desarrollo Local: La elección puede depender de cómo prefieres estructurar tu entorno de desarrollo local. A veces, un enfoque monolítico es más simple para el desarrollo local, mientras que la modularidad es beneficiosa para la estructura general del proyecto.

  • Despliegue: Considera cómo planeas implementar y desplegar tu aplicación. Los proyectos modulares pueden tener ventajas en términos de despliegue selectivo de módulos y actualizaciones más específicas.

  • Preferencias del Equipo: Los estándares y las preferencias del equipo de desarrollo también son un factor importante. Algunos desarrolladores pueden sentirse más cómodos con un enfoque monolítico, mientras que otros pueden preferir la modularidad.



En última instancia, la elección entre un esquema standalone y un esquema modular dependerá de la naturaleza específica de tu proyecto, tus objetivos de desarrollo y las preferencias de tu equipo. A menudo, la modularidad es lo más recomendable en proyectos grandes y complejos, pero no hay una solución única para todos los casos. Es importante evaluar los pros y los contras en función de la situación particular de tu app. En cualquier caso, espero que lo comentado en este post te haya servido para tener una visión más clara de la diferencia entre un proyecto standalone y un proyecto modular de Angular.


Saludos.


Comentarios

Entradas populares de este blog

Componentes y Ventanas de Java Swing

Creación de Webservice SOAP básico

Fichero standalone del Servidor JBoss EAP