Quali sono i vantaggi dell'utilizzo di Dependency Injection e dei contenitori IoC?

59

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?

    
posta Andy Lowry 16.11.2010 - 00:26
fonte

5 risposte

42

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.

    
risposta data 16.11.2010 - 00:30
fonte
8

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.

    
risposta data 16.11.2010 - 05:16
fonte
2

I vantaggi delle iniezioni di dipendenza sono:

  1. Il tuo codice è pulito e più leggibile.
  2. I codici sono accoppiati liberamente.
  3. Più riutilizzabile in quanto le implementazioni sono configurate nel file XML, può essere utilizzato in un contesto diverso.
  4. Il codice
  5. può essere facilmente testabile con un'implementazione fittizia
risposta data 20.04.2016 - 04:50
fonte
1

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.

    
risposta data 15.12.2010 - 17:07
fonte
-1

Quando DI viene usato per esporre oggetti interni ai fini del test, il modello è stato abusato.

    
risposta data 02.08.2012 - 11:30
fonte

Leggi altre domande sui tag