Skip to content

Raccolta di anti-pattern RxJS

RxJS è una potente libreria di programmazione reattiva, ma se usata in modo non corretto, può essere un terreno fertile per i bug e ridurre la manutenibilità. In questa sezione presentiamo gli errori più comuni nell'uso di RxJS in TypeScript e le best practice per evitarli.

Scopo di questa sezione

  • Prevenire i bug: evitare i problemi di implementazione comprendendo in anticipo gli errori più comuni
  • Migliorare la manutenibilità: imparare pattern di codice facili da leggere e testare
  • Ottimizzare le prestazioni: imparare tecniche per evitare memory leak ed elaborazioni non necessarie

Elenco di anti-pattern

Questa sezione tratta i seguenti 17 anti-pattern.

🔴 Problemi critici

Questi pattern possono avere un grave impatto sull'applicazione.

PatternProblemaImpatto
Esposizione esterna del SubjectEsporre Subject così com'è e consentire chiamate esterne a next()Imprevedibilità della gestione dello stato, difficoltà di debug
Subscribe annidatiChiamare più subscribe dentro subscribeCallback hell, complicazioni nella gestione degli errori
Proliferazione di flag di gestione stato17 flag booleani per gestire lo stato, pensiero imperativo residuoLeggibilità ridotta, manutenzione difficile, focolaio di bug
Nidificazione di if in subscribeRamificazione condizionale complessa all'interno di subscribe (3 o più livelli di nidificazione)Leggibilità ridotta, difficile da testare, viola il pensiero dichiarativo
Dimenticare unsubscribeNon annullare la sottoscrizione di stream infinitiMemory leak, spreco di risorse
Uso improprio di shareReplayUsare shareReplay senza capire come funzionaRiferimenti a dati obsoleti, memory leak

🟡 Problemi che richiedono attenzione

Questi possono rappresentare un problema in determinate situazioni.

PatternProblemaImpatto
Effetti collaterali in mapCambiare stato nell'operatore mapComportamento imprevedibile, difficile da testare
Ignorare Cold/HotNon considerare la natura dell'ObservableEsecuzione duplicata, comportamento inatteso
Mescolare Promise e ObservableNon convertire correttamente tra Promise e ObservableNon annullabile, scarsa gestione degli errori
Ignorare la backpressureNon controllare eventi ad alta frequenzaDegrado delle prestazioni, blocco dell'UI

🔵 Problemi di qualità del codice

Non sono bug diretti, ma fattori che riducono la qualità del codice.

PatternProblemaImpatto
Soppressione degli erroriNon gestire correttamente gli erroriDifficoltà di debug, scarsa esperienza utente
Leak di eventi DOMNon rilasciare gli event listener DOMMemory leak, scarse prestazioni
Mancanza di type safetyUso eccessivo di anyErrori a runtime, difficoltà di refactoring
Selezione impropria dell'operatoreUsare operatori non adatti allo scopoInefficienza, comportamento inatteso
Eccessiva complessitàComplicare processi che potrebbero essere scritti semplicementeLeggibilità ridotta, difficile da mantenere
One-liner hellMiscuglio di definizioni di stream, trasformazioni e sottoscrizioniDifficile da debuggare, difficile da testare, leggibilità ridotta
Cambiamenti di stato in subscribeCambiare direttamente lo stato all'interno di subscribeDifficile da testare, causa di bug
Mancanza di testNon scrivere test per il codice RxJSRegressioni, difficoltà di refactoring

Processo di apprendimento

  1. Errori comuni e come affrontarli per apprendere 15 anti-pattern in dettaglio
  2. Per ogni anti-pattern, troverete codice di "cattivo esempio" e "buon esempio"
  3. Checklist per evitare gli anti-pattern per rivedere il proprio codice
  4. Implementare le best practice e condividerle con il team

Sezioni correlate

Dopo aver appreso gli anti-pattern, consultate anche le seguenti sezioni:

Prossimi passi

  1. Iniziate da Errori comuni e come affrontarli per imparare gli anti-pattern pratici e le loro soluzioni
  2. Dopo l'apprendimento, usate la Checklist per evitare gli anti-pattern per rivedere il codice attuale

Importante: Questi anti-pattern si trovano frequentemente nei progetti reali. Comprenderli presto vi aiuterà a scrivere codice RxJS di qualità.

Pubblicato sotto licenza CC-BY-4.0.