Tips para tener una arquitectura Angular escalable, rápida y sólida - Shared / Core modules
Al desarrollar una aplicación en Angular, o cualquier otro tipo de aplicación, necesitamos que esta sea escalable y mantenible.
Existen un conjunto de herramientas y prácticas que nos ayudaran conseguirlo.
Vamos a hablar de dos módulos utilizados para organizar aplicaciones Angular, core y shared.
Estos estarán situados en la raíz, dentro de la carpeta app.
Nos ayudarán a organizar todos nuestros artefactos y a compartirlos por toda nuestra aplicación de forma eficaz. Veámoslo:
Shared module
Este módulo va a ser importado por todos los módulos funcionales que desarrollemos.
Aquí es donde declararemos todos los artefactos que no sean servicios y que necesiten ser
importados en varios de los módulos funcionales que vayamos a desarrollar.
Declararemos los componentes,
pipes u otros módulos entre otras cosas.
Estos serán organizados por funcionalidades y no por tipos. Es decir,
no se organizarán por carpetas, containers, pipes... si no por picture-transformer, logger...
Exportaremos los módulos que queramos que sean incluídos por todos los módulos funcionales que
vayamos a crear, de esta forma, no necesitaremos importarlos en cada uno de ellos.
Un ejemplo de
ellos son los módulos CommonModule o HttpClientModule.
Core module
El módulo core, a diferencia del shared, solo será importado en el AppModule una sola vez.
Conseguiremos de este modo que los servicios que aquí se provean, solo serán instanciados una vez (patrón Singleton).
Esto es muy útil para
servicios de utilidades o la store de la aplicación.
En versiones modernas de Angular, ya no es necesario proveer los servicios desde algún módulo, ya que se puede
definir en el mismo servicio que sea proveído desde la raíz de la aplicación.
@Injectable({
providedIn: 'root',
})
Aunque sigue siendo una buena práctica situar todos estos servicios en este módulo.