Angular Enterprise
Mauvaises pratiques en Angular
- Cours
- 13 pratiques
- 4 min de lecture
Ici, nous avons rassemblé une liste de mauvaises pratiques à éviter lorsque vous développez une application Angular. Avant de commencer un nouveau projet, il est fortement recommandé de faire une liste similaire en fonction de votre expérience précédente, cela vous aidera à tirer les leçons de vos expériences et donc à ne pas refaire les mêmes erreurs encore et encore.
- les structures logiques trop imbriquées (blocs
if/else,subscribeimbriqués, templates imbriqués) rendent le code difficile à lire, à tester et à maintenir. Préférez les retours anticipés, les petites fonctions, les opérateurs RxJS ou les signauxcomputed. - le manque de modèle de conception clair tel que les composants conteneur/présentation entraîne des difficultés de lecture, de débogage, de test et de maintenance de la base de code. Ce modèle, aussi appelé composants intelligents/stupides (smart/dumb), doit être utilisé partout dans l'application.
- le manque d'outil de surveillance des applications et de suivi des erreurs dès le début du projet, comme
Sentry. Il en résulte une tonne de bogues le jour où vous l'installez, puis vous devez travailler pendant des mois afin de débarrasser l'application de tous ces bogues. - le manque de fonctions
pures: les développeurs sont habitués à écrire des fonctionsimpuresqui modifient l'état des variables du composant à l'intérieur de la fonction, ce qui entraîne des effets de bord et rend les fonctions non testables. Il est plus difficile d'écrire des fonctions pures, mais le code est ensuite plus facile à maintenir. - le manque de
typagessimples pour les objets, les fonctions, les inputs et les outputs : les développeurs utilisent parfoisanyà la place. Si en plus vous n'avez pas de tests unitaires, votre code est très vulnérable aux erreurs. - le manque de typages en
readonlyetDeepReadonlyentraîne un code dangereux et une possible mutation de tout attribut dans la base de code, les fonctions auront potentiellement des effets de bord. - l'absence de convention claire pour surcharger le thème existant. Une convention claire doit être utilisée, par exemple si vous souhaitez personnaliser le thème
Angular Material, il existe de nombreux cas différents à connaître (variables de thème, composants en overlay, composants classiques...). Les versions récentes d'Angular Material exposent pour cela des design tokens et des mixins Sassoverrides: préférez-les à la surcharge des classes CSS internes. - le manque de découpage en fonctionnalités chargées en lazy (routes lazy avec
loadComponent/loadChildren, ou moduleslazydans les applications plus anciennes) entraîne un gros bundle principal, mais rend aussi l'application de plus en plus couplée et, plus tard, il devient presque impossible de découper la base de code. - la mauvaise utilisation de
NgRx: le store global ne doit être utilisé que pour certains types d'entités qui sont partagées, hydratées, disponibles, récupérées ou impactées (le principe SHARI). C'est aussi pourquoi de nouvelles solutions ont émergé (ComponentStore, puisSignalStoreet les signaux Angular) afin de donner aux développeurs la possibilité de stocker des données dans un état local au lieu du storeNgRxglobal. - l'utilisation de
::ng-deepsans:hostaffecte le CSS des autres composants et casse le principe d'isolation des styles. Pour l'éviter, utilisez:host ::ng-deepou, encore mieux, des variables CSS pour surcharger le style comme expliqué dans notre guide des bonnes pratiques. Ces erreurs sont également dues au fait qu'Angular Material affiche une partie de certains composants à l'extérieur de ceux-ci, dans un panneau d'overlay détaché qui apparaît au-dessus de la vue, par exemple lorsqu'unmat-selectest ouvert. - l'accumulation d'avertissements de dépendances circulaires rendra votre application de moins en moins maintenable. Chaque fois que vous détectez une dépendance circulaire, il est recommandé de prendre du temps et de la corriger.
- l'utilisation de
combineLatestdans un effect NgRx pour lire le store déclenche des actions inattendues à chaque émission de l'une des sources. Il est fortement conseillé d'utiliserconcatLatestFrom(de@ngrx/operators) ouwithLatestFromafin d'être sûr de ne pas écouter les événements futurs. - l'utilisation de la règle Sass
@import, désormais dépréciée, dans chaque composant produit beaucoup de code dupliqué, utilisez@useet@forwardà la place.