Hervera
Open Menu
Utilizar los módulos shared y core para organizar las herramientas comunes es una buena práctica en aplicaciones escalables hechas en Angular.

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 core angular

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.

shared modules

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.

Fotografía de portada de: unsplash-logo Nana Smirnova