Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Gestione delle dipendenze per questioni trasversali
La gestione consapevole delle dipendenze è fondamentale per il successo di un'architettura distribuita come i microfrontend. La gestione delle dipendenze è una delle parti più impegnative dello sviluppo di microfrontend.
In un'architettura micro-frontend, due aspetti importanti della gestione delle dipendenze sono la riduzione delle prestazioni dovuta al trasferimento di artefatti di codice di grandi dimensioni al client e il sovraccarico delle risorse di calcolo. Idealmente, l'organizzazione deve stabilire come vengono mantenute le dipendenze in un'architettura frontend distribuita.
Tre strategie valide per imporre il mantenimento delle dipendenze sono «share nothing», utilizzando standard web come mappe di importazione e federazione dei moduli. Altri approcci sono anti-pattern perché violano i principi di base delle architetture distribuite.
Non condividete nulla, ove possibile
L'approccio share-nothing postula che nessuna dipendenza tra artefatti software indipendenti debba essere condivisa affatto, o almeno non durante l'integrazione o il runtime. Ciò significa che se due micro-frontend dipendono dalla stessa libreria, ognuno deve essere inserito nella libreria in fase di compilazione e spedito separatamente. Inoltre, ogni microfrontend deve verificare che la libreria non inquini i namespace globali e le risorse condivise.
Ciò porta a ridondanze, ma è un compromesso consapevole con la massima agilità. Senza dipendenze di runtime condivise, i team hanno la massima flessibilità per far evolvere il software in qualsiasi modo ritengano utile, purché lo facciano nell'ambito della loro soluzione e non violino alcun contratto di interfaccia.
Su una piattaforma in cui i microfrontend seguono il principio «share-nothing», è importante mantenere i microfrontend il più leggeri possibile. Richiede sviluppatori esperti e diligenti nell'ottimizzare i propri microfrontend in termini di prestazioni e che non sacrifichino l'esperienza utente per l'esperienza degli sviluppatori.
Quando condividi codice
Quando decidi di condividere del codice, puoi condividerlo come librerie o moduli di runtime. Ad esempio, il team principale del frontend fornisce librerie per l'utilizzo di microfrontend tramite CDN. I business value team possono caricare le librerie in fase di esecuzione oppure utilizzare gli archivi di pacchetti per pubblicare le proprie librerie. I team di Micro-frontend possono sviluppare utilizzando una versione specifica della libreria pacchettizzata in fase di compilazione, in modo simile alle applicazioni mobili che utilizzano framework ibridi.
Una terza opzione consiste nell'utilizzare un registro dei pacchetti privato per supportare l'integrazione in fase di compilazione di librerie comuni. Ciò riduce il rischio che una modifica sostanziale del contratto di libreria provochi errori in fase di esecuzione. Tuttavia, questo approccio più conservativo richiede una maggiore governance per sincronizzare tutti i microfrontend con le versioni più recenti della libreria.
Per migliorare i tempi di caricamento delle pagine, i micro-frontend possono esternalizzare le dipendenze della libreria da caricare dai blocchi memorizzati nella cache di un CDN come Amazon. CloudFront
Per gestire le dipendenze di runtime, i micro-frontend possono utilizzare import-maps (o librerie comeSystem.js) per specificare da dove viene caricato ogni modulo in fase di runtime. webpack Module Federation è un altro approccio per puntare a una versione ospitata di un modulo remoto e risolvere dipendenze comuni tra micro-frontend indipendenti.
Stato condiviso
Per ridurre l'accoppiamento dei microfrontend, è importante evitare una gestione globale dello stato accessibile da tutti i microfrontend nella stessa visualizzazione, in modo simile alle architetture monolitiche. Ad esempio, avere un negozio Redux globale accessibile da tutti i microfrontend aumenta l'accoppiamento.
Uno schema per eliminare lo stato condiviso consiste nell'incapsularlo all'interno di microfrontend e comunicare con messaggi asincroni, come discusso in precedenza.
Se assolutamente necessario, introduci interfacce ben definite per lo stato globale e opta per la condivisione in sola lettura per evitare comportamenti imprevisti:
-
Quando è presente una divisione verticale, puoi utilizzare i componenti URL e l'archiviazione del browser per accedere alle informazioni dall'ambiente host.
-
In caso di suddivisione mista, puoi anche utilizzare gli eventi o le JavaScript librerie personalizzati standard DOM, come emettitori di eventi o flussi bidirezionali, per passare informazioni ai microfrontend.
Se hai bisogno di condividere diverse informazioni tra i microfrontend, ti consigliamo di rivisitare i confini dei microfrontend. La necessità di condivisione potrebbe essere causata dall'evoluzione del business o da una progettazione iniziale scadente.
È anche possibile utilizzare sessioni lato server, in cui ogni micro-frontend recupera i dati richiesti utilizzando un identificatore di sessione. Per ridurre l'accoppiamento, è importante eliminare lo stato condiviso e mantenere separati i dati di sessione specifici del microfrontend.