Mentre sono semi-d'accordo con voi con l'esempio DB, una delle grandi cose che ho trovato utile usare DI è di aiutarmi a testare il livello che costruisco in cima al database.
Ecco un esempio ...
Tu hai il tuo database.
Tu hai il tuo codice che accede al database e restituisce oggetti
Si sono oggetti di dominio di business che prendono gli oggetti dell'elemento precedente e fare un po di logica con loro.
Se si unisce l'accesso ai dati con la logica del dominio aziendale, gli oggetti del dominio possono diventare difficili da testare. DI consente di iniettare i propri oggetti di accesso ai dati nel proprio dominio in modo da non dipendere dal database per test o possibilmente dimostrazioni (è stata eseguita una demo in cui alcuni dati sono stati estratti da xml anziché da un database).
Anche l'astrazione di componenti e quadri di terze parti come questo potrebbe essere d'aiuto.
Oltre all'esempio di prova, esistono alcuni punti in cui è possibile utilizzare DI tramite un approccio Design by Contract. Potresti trovare opportuno creare un motore di elaborazione di ordinamenti che richiami i metodi degli oggetti che stai iniettando in esso. Anche se non può veramente "processarlo", esegue i metodi che hanno un'implementazione diversa in ogni oggetto che fornisci.
Ho visto un esempio di ciò in cui ogni oggetto del dominio aziendale aveva una funzione "Salva" che veniva chiamata dopo essere stata iniettata nel processore. Il processore ha modificato il componente con le informazioni di configurazione e Salva gestito lo stato primario dell'oggetto. In sostanza, DI ha completato l'implementazione del metodo polimorfico degli oggetti conformi all'interfaccia.
Mi piacciono tutte le tue ragioni finora ... Capisco che per lo più sono programmatori esperti che "ottengono" DI. Come ho capito, DI riguarda la qualità. Noi, come programmatori, vogliamo produrre il massimo livello di software che possiamo - e testarlo aiuta. Ho scritto molto del codice nel corso degli anni, e sono felice di dire che 10 anni fa, oltre il 50% di esso è ancora in esecuzione .. e che senza DI. Forse questo ti aiuta a capire perché sono un po 'riservato a DI? – CodeMonkey
Ovviamente DI è relativamente relativamente nuovo. Quindi, naturalmente, è possibile scrivere software di alta qualità senza di esso - ma con il progresso di cose come framework di test e TDD, DI può rendere molto più facile scrivere test e scrivere codice che è gestibile per il futuro (accoppiamento). – digiarnie