Sto programmando di fare un discorso su Dependency Injection e IoC Containers e sto cercando alcuni buoni argomenti per usarlo.
Quali sono i vantaggi più importanti dell'utilizzo di questa tecnica e di questi strumenti?
Sto programmando di fare un discorso su Dependency Injection e IoC Containers e sto cercando alcuni buoni argomenti per usarlo.
Quali sono i vantaggi più importanti dell'utilizzo di questa tecnica e di questi strumenti?
Risposte:
La cosa più importante, per me, è semplificare il rispetto del principio della responsabilità singola .
DI / IoC mi semplifica la gestione delle dipendenze tra oggetti. A sua volta, ciò mi rende più semplice interrompere la funzionalità coerente nel proprio contratto (interfaccia). Di conseguenza, il mio codice è stato molto più modulare da quando ho appreso di DI / IoC.
Un altro risultato di questo è che posso vedere molto più facilmente la mia strada verso un design che supporta il principio aperto-chiuso . Questa è una delle tecniche più stimolanti per la fiducia (seconda solo ai test automatizzati). Dubito di poter sposare abbastanza le virtù del principio aperto-chiuso.
DI / IoC è una delle poche cose nella mia carriera di programmatore che è stata un "punto di svolta". C'è un enorme divario nella qualità tra il codice che ho scritto prima e dopo aver appreso DI / IoC. Vorrei sottolineare questo ancora. ENORME miglioramento della qualità del codice.
Gli esempi che mi hanno davvero aperto gli occhi hanno visto come è stato possibile testare facilmente gli oggetti creati in questo modo. Prima di ciò, ho avuto problemi nel tentativo di isolare oggetti per un test unitario. Spesso scrivevo test per interagire con un sistema molto più grande. Questo è stato davvero difficile perché il sistema nel suo insieme era molto meno prevedibile e molto più incline a cambiare i singoli componenti.
I vantaggi delle iniezioni di dipendenza sono:
Penso che i benefici effettivi siano più politici che tecnici. DI è semplicemente un'alternativa al modello di Service Locator , niente di più. Di per sé, non rende più facile seguire principi come SRP o OCP o disaccoppiare i livelli. Altri intervistati qui stanno confondendo concetti e tecniche diversi, IMO.
È possibile raggiungere gli stessi obiettivi in termini di elevata coesione e basso accoppiamento utilizzando Localizzatori di servizi o semplicemente istanziando le dipendenze direttamente ogni volta che è applicabile (il più delle volte).
Ora, so che molti non saranno d'accordo con questa opinione. Sarò felice di discutere esempi concreti.
Quando si utilizza DI per esporre oggetti interni a scopo di test, il modello è stato abusato.