it-swarm.it

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

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?

67
Andy Lowry

La cosa più importante, per me, è rendere facile seguire il principio di 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 divario enorme tra il codice che ho scritto prima e dopo aver appreso DI/IoC. Vorrei sottolineare questo ancora. [~ # ~] enorme [~ # ~] miglioramento della qualità del codice.

48
quentin-starin

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.

9
Winston Ewert

I vantaggi delle iniezioni di dipendenza sono:

  1. Il tuo codice è pulito e più leggibile.
  2. I codici sono liberamente accoppiati.
  3. Più riutilizzabili poiché le implementazioni sono configurate nel file XML, può essere utilizzato in un contesto diverso.
  4. Il codice può essere facilmente testabile con diverse implementazioni simulate.
4
Solaimani SA

Penso che i benefici effettivi siano più politici che tecnici. DI è semplicemente un'alternativa al modello 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.

2
Rogério