Ho letto un numero di thread che spiegano la differenza tra IoC e DI e mentre molte delle spiegazioni si contraddicevano a vicenda, penso che mi aiutassero ancora a capire la differenza.Inversion Of Control vs Dipendenza Injection con citazioni selezionate - la mia comprensione è corretta?
Quindi qui vorrei chiedere se la mia comprensione è corretta e anche gli estratti di post che mi hanno aiutato (anche se alcuni di loro si contraddicono a vicenda).
So che ci sono stati molti thread sull'argomento, ma spero che questo thread non si chiuda da quando non penso che nessun OP nei thread menzionati abbia mostrato tutti i post rilevanti (da vari discussioni) che li ha aiutati a capirlo finalmente.
In ogni modo, ecco come ho capito (se possibile, presentare/rispondere a ogni domanda individuale):
a) Quando applichiamo principio DIP a livello quadro, allora usiamo il termine IoC? E uno dei meccanismi per implementare DIP a livello di struttura è DI?
b) Il termine CIO non si applica quando implementiamo DIP (usando DI) ad un livello livello più basso/non-quadro, nel qual caso semplicemente chiamiamo DI?
c) DI ci aiuta a achive DIP passando il controllo della creazione effettiva e la selezione delle dipendenze ad un 3rd party che è neutrale per uno degli altri 2 coinvolti?
d) Quando viene applicata DIP (usando DI) a livello quadro (IOC), quindi tre tipi di controllo ottenere invertito:
Il controllo dell'interfaccia. Ora il modulo di alto livello controlla l'interfaccia che i moduli di livello inferiore devono rispettare invece del contrario
Il controllo del flusso. -> Ora codice del framework (invece di utente/codice commercio) controlla il flusso del programma (in altre parole - essi (cioè quadro) si chiama (cioè il codice di business))
Il controllo della creazione delle dipendenze. Questa inversione sta passando il controllo dell'effettiva creazione e selezione delle dipendenze a una terza parte che è neutrale rispetto a uno degli altri 2 coinvolti.
e) Quando viene applicata DIP (usando DI) a livello non-quadro, quindi due tipi di controllo ottenere invertito:
Il controllo dell'interfaccia . modulo Ora alto livello controlla l'interfaccia che i moduli di livello inferiore devono aderire anziché viceversa
Il controllo della creazione di dipendenza. Questa inversione sta passando il controllo dell'effettiva creazione e selezione delle dipendenze a una terza parte che è neutrale rispetto a uno degli altri 2 coinvolti.
?
Ecco alcuni estratti che hanno contribuito:
Why so many terms to say the same thing? IoC and DIP
Inversion of Control è il termine generico. Dependency Injection è un tipo specifico di IoC
...
Inversion of Control è quando il quadro/infrastrutture invoca codice di applicazione, piuttosto che il contrario
...
può fare DI senza fare IoC. Se si inietta aConsoleStringWriter in un Hello2 World , non lo considero realmente come IoC perché non esiste un "framework" o "infrastruttura".
Inversion of Control < Dependency Injection
Se si accetta la definizione di Fowler, Inversion of Control è un molto più termine più ampio di DI che copre allframework utilizzo in cui si collega in un quadro, ma il quadro è ancora in controllo. Dipendenza L'iniezione è una specializzazione di IoC che applica IoC specificatamente a gestisce le dipendenze.
Where exactly is the difference between IoC and DI
CIO è la possibilità di variare l'attuazione di un contratto. DI è la capacità di fornire l'implementazione.
...
Nelle applicazioni tradizionali, gli sviluppatori avrebbero scrivere codice aziendale e codice del framework. Il codice aziendale chiamerebbe quindi il codice quadro per eseguire le attività.In base ad un modello di CIO, è "invertire" quel modello e creare un quadro che accetta moduli di business e li chiama a svolgere compiti
Dependency Injection è una tecnica (difficile chiamarlo un modello, in realtà) di rimuovere interna dipendenze dalle implementazioni di che consente di iniettare oggetti dipendenti nella classe/metodo da un chiamante esterno . I framework IoC utilizzano l'injection dependency per fornire i moduli utente e altro codice dipendente alle routine framework che "incollano tutto insieme". L'iniezione delle dipendenze viene utilizzata pesantemente dai framework IoC perché questo è il meccanismo che consente loro di "Chiama Tu".
DIP è il principio che ci guida verso il DI. Fondamentalmente, l'accoppiamento libero è l'obiettivo e ci sono almeno due modi per raggiungerlo. • Dipendenza iniezione • Servizio Locator
Does anyone have a good analogy for dependency injection?
L'essenza di Inversion of Control (di cui dipendenza iniezione è un'implementazione) è la separazione dell'uso di un oggetto dal loro gestione .
Difference between ioc and dependency injection
I termini Dependency Injection (DI) & Inversion of Control (IOC) sono generalmente usati in modo intercambiabile per descrivere lo stesso modello di progettazione (anche se non tutti sono d'accordo su questo punto, e un po ' le persone tendono a applicarle in modi leggermente diversi). Il pattern era originariamente chiamato IoC, ma Martin Fowler propose il passaggio a DI perché tutti i framework invertivano il controllo in qualche modo e voleva essere più specifico su su quale aspetto del controllo veniva invertito.
Inversion of Control vs Dependency Injection
Inversion of Control (IOC) significa che gli oggetti non creino altri oggetti su cui si basano per fare il loro lavoro. Invece, ottengono gli oggetti di cui hanno bisogno da un'origine esterna (ad esempio, un file di configurazione xml ). Iniezione di dipendenza (DI) significa che questo viene fatto senza l'intervento dell'oggetto, solitamente da un componente del framework che passa i parametri del costruttore e imposta le proprietà.
ringraziamento
Nota che SO non è un forum, quindi non ha "discussioni". È un sito di domande e risposte, quindi ha domande e risposte. Questa non è una distinzione minore, poiché la differenza nei formati ha una serie di conseguenze. Inoltre, [programmers.SE] (http://programmers.stackexchange.com/) è più adatto per domande concettuali e di design. SO è per problemi di implementazione. – outis
[questo libro] (http://manning.com/seemann/) ti darà tutte le risposte. – Steven