Partie 1 : Démarrer un projet sur de bonnes bases
Partie 2 : Construire un espace membre sécurisé avec JWT
Partie 3 : Implémenter des fonctionnalités métiers
Partie 4 : Bonus

2.4.1. Bonne pratique concernant le CoreModule

Avant de passer à la suite, j’aimerai que nous respections une bonne pratique recommandée par Google. Vous vous souvenez que le CoreModule ne doit être importé qu’une seule fois dans le AppModule. Ne me dites pas que vous avez déjà oublié ! 😏

Pour le moment, rien ne nous empêche d’importer le CoreModule à plusieurs endroits dans l’application. Il est donc recommandé d’ajouter une petite vérification dans le constructeur du CoreModule, pour l’empêcher d’être instancié à différents endroits :

import { NgModule, Optional, SkipSelf } from ‘@angular/core’; 

export class CoreModule {
 constructor(@Optional() @SkipSelf() parentModule: CoreModule) {
  if (parentModule) {
   throw new Error('CoreModule is already loaded.');
  }
 }
}

Mais… Qu’est-ce que ce code barbare ?

C’est une question légitime. Bon, déjà vous avez compris à quoi cela sert : s’assurer que le CoreModule n’est importé qu’une seule fois. En fait, vos interrogations doivent surtout porter sur ces deux nouvelles annotations, @Optional et @SkipSelf.

La première annotation @Optional s’applique sur un paramètre de constructeur, et permet d’indiquer qu’une dépendance est optionnelle. Si la dépendance n’est pas renseignée, alors c’est la valeur null qui est injectée.

La deuxième annotation @SkipSelf s’applique également sur un paramètre de constructeur. Elle indique au mécanisme d’injection de dépendance d’Angular que la résolution de cette dépendance doit commencer à partir de l’injecteur parent. Pour faire simple, le CoreModule ne peut être instancié qu’une fois, et depuis un module parent uniquement.

Mais rassurez-vous, vous n’avez absolument pas besoin de vous prendre la tête sur ce code pour le moment. Sachez simplement qu’il s’agit d’une bonne pratique concernant le CoreModule. Nous aurons tout le temps d’aborder les questions techniques plus tard.