Ho intenzione di fare un talk 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?
Ho intenzione di fare un talk 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?
La cosa più importante per me è semplificare il seguire il principio di singola responsabilità .
DI / IoC semplifica la gestione delle dipendenze tra gli oggetti. A sua volta, ciò mi rende più facile rompere funzionalità coerenti nel proprio contratto (interfaccia). Di conseguenza, il mio codice è stato molto più modulare da quando ho appreso DI / IoC.
Un altro risultato è che posso vedere molto più facilmente il mio percorso verso un design che supporta il principio aperto-chiuso . Questa è una delle tecniche più fiduciose (seconda solo ai test automatici). Dubito che potrei sposare abbastanza bene le virtù del Principio Aperto.
DI / IoC è una delle poche cose nella mia carriera di programmatore che è stato un "game changer". C'è un enorme gap di qualità tra il codice che ho scritto prima e & dopo aver imparato DI / IoC. Permettetemi di enfatizzarlo 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 difficoltà nel tentare di isolare gli oggetti per un test unitario. Scrivo spesso 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 Localizzatore di servizio , niente di più. Di per sé, non rende più semplice seguire principi come SRP o OCP o disaccoppiare i livelli. Qui gli altri intervistati stanno confondendo concetti e tecniche diverse, IMO.
Puoi raggiungere gli stessi obiettivi in termini di alta coesione e basso accoppiamento utilizzando i localizzatori di servizio, o semplicemente istanziando le dipendenze direttamente ogni volta che è possibile (che è la maggior parte delle volte).
Ora, so che molti non saranno d'accordo con questa opinione. Sarò lieto di discutere esempi concreti.
Quando DI viene usato per esporre oggetti interni ai fini del test, il modello è stato abusato.
Leggi altre domande sui tag design-patterns dependency-analysis