2012-07-03 9 views
11

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:

  1. Il controllo dell'interfaccia. Ora il modulo di alto livello controlla l'interfaccia che i moduli di livello inferiore devono rispettare invece del contrario

  2. 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))

  3. 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:

  1. Il controllo dell'interfaccia . modulo Ora alto livello controlla l'interfaccia che i moduli di livello inferiore devono aderire anziché viceversa

  2. 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 vs. DI vs. IoC

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

+1

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

+3

[questo libro] (http://manning.com/seemann/) ti darà tutte le risposte. – Steven

risposta

17

Bene, questo è il mio punto di vista:

DI Overview

DIP significa che si programma contro un'astrazione.Si inverte il tipo di dipendenza da un'implementazione a un'astrazione.

IOC significa che qualcun altro è responsabile per ottenere l'implementazione per la data astrazione. Normalmente il consumatore usa la nuova parola chiave per ottenere una dipendenza. Con IoC si inverte il controllo, in modo che il consumatore non sia più responsabile della creazione dell'istanza.

Dependency Injection e Servizio Ubicazione sono una parte di Inversion of Control. DIvsSL

Consulta anche: https://stackoverflow.com/a/10053413/175399

+0

1 - Secondo una delle citazioni, siamo anche in grado di fare DI senza IoC (quando implementiamo DIP via DI a livello non-framework). Sei d'accordo? 2 - Comunque, suppongo che a, b, c e d siano tutti corretti? – user1483278

+1

1 Quando si utilizza IoC, il consumatore di una dipendenza non è responsabile della creazione di un'istanza. Se si crea l'istanza con un framework o meno non importa. Dovresti separare i principi/le metodologie dai quadri. – Rookian

+0

grazie mille per il tuo aiuto – user1483278

0

ho scritto le differenze a mio [blog]: http://dotnet-stuff.com/tutorials/dependency-injection/dependency-inversion-principle-dependency-injection-and-inversion-of-control-dip-ioc-and-di "Clicca qui per gli aggiornamenti", che come possiamo organizzare Inversion of Control, principio di inversione delle dipendenze & Dependency Injection. In breve, possiamo dire che -

Nella parte superiore è il principio di inversione delle dipendenze che è un modo di progettare software. Non dice come creare un modulo indipendente. Inversion of Control (IoC) fornisce il modo di applicare il principio DPI. Ma ancora IoC non ci fornisce un'implementazione specifica. Fornisce alcuni metodi in modo da poter invertire il controllo. Se vogliamo invertire il controllo usando l'inversione di binding o la creazione di dipendenza, possiamo ottenerlo implementando l'iniezione di dipendenza (DI).

Problemi correlati