Come evitare l'incubo della catena di dipendenze del modulo causato da dipendenze transitive?

8

Molte persone (la maggior parte?) AngularJS sembrano sostenere l'idea di rompere le app AngularJS in molti moduli.

Brian Ford nel suo blog afferma già che il packaging per livello (controller, servizio, ecc.) è una nozione "sciocca", quindi non ci andrò nemmeno. (Vedi link .)

Ma supponiamo che tu modularizzi un'app per caratteristica. Forse hai un modulo utenti e un modulo messaggi , insieme al modulo app standard per caricare questi moduli funzione. Metti premurosamente i percorsi relativi alla funzionalità utente nel modulo utenti e i percorsi relativi ai messaggi nel modulo messaggi . Ora, nella mia mente, hai creato una dipendenza in OGNI modulo delle caratteristiche su ngRoute . Quindi ogni modulo dovrebbe elencare "ngRoute" nella sua matrice di dipendenze, giusto?

Sfortunatamente, AngularJS rende fin troppo facile rovinare tutto. Se il modulo app carica sia utenti che messaggi , ma solo utenti elenca "ngRoute" come dipendenza, non importa in fase di esecuzione: $ routeProvider sarà ancora iniettato nella tua funzione di configurazione in messaggi , essendosi sostanzialmente risolto tramite la dipendenza del modulo utenti su ngRoute .

Il mio problema potrebbe riguardare lo schema comune di un modulo "app" che carica / fa riferimento a vari moduli di funzionalità. Lo schema ha senso per me, così come le dipendenze transitive. Ciò che è problematico è che la particolare implementazione di Angular può mascherare casi in cui un modulo non fa riferimento alle sue dipendenze del modulo anche in modo indiretto. Il modulo può funzionare nel contesto di una particolare app (perché il modulo è referenziato da un altro modulo "app" che fa anche riferimento alle sue dipendenze direttamente o indirettamente), ma se dovessi copiare il modulo in un'altra app, fallirebbe a causa di dipendenze mancanti.

Ho l'impressione che la maggior parte della gente non prenda in considerazione il fatto che il modulo utenti ora sia essenzialmente una dipendenza del modulo messaggi . Tuttavia, è un problema che ho problemi a guardare oltre. Per me, se creiamo probabilmente queste confuse dipendenze tra i moduli di funzionalità, questo diminuisce davvero il vantaggio netto della modularizzazione, e preferirei avere un solo modulo app che incapsula tutti i componenti per tutte le funzionalità nel app.

    
posta Nick Saunders 18.10.2014 - 01:38
fonte

1 risposta

1

Non vorrei difendere molti piccoli moduli, il loro guadagno è troppo piccolo. Il modulo angolare non è molto di un sistema modulare. Non forniscono alcun vero namespacing, non sono nemmeno rigidi, se qualche altro modulo attivo "importa" la dipendenza di solito funziona (come hai detto) ecc. Per questo motivo non ti aiuterà a "documentare" le tue dipendenze per modulo, sarà incompleto.

Basta attenersi a moduli molto voluminosi / grandi. Ho imparato a guardarli per lo più come una configurazione del contenitore di iniezione di dipendenza non tanto come un mezzo per "componentizzare". Tutti questi "moduli" di solito violano comunque YAGNI, come se tu avessi mai eseguito l'app senza. Le considerazioni sul riutilizzo sono per lo più una promessa che raramente offre.

Al giorno d'oggi uso i moduli TypeScript per partizionare il mio codice. Le dipendenze dei moduli angolari Mi riservo in gran parte per le cose di terze parti.

    
risposta data 25.07.2016 - 12:57
fonte

Leggi altre domande sui tag