2012-07-03 15 views
11

He leído varios hilos que explican la diferencia entre IoC y DI y aunque muchas de las explicaciones se contradijeron, creo que todavía me ayudaron a entender la diferencia.Inversion Of Control vs Dependency Injection con citas seleccionadas - ¿es correcto mi entendimiento?

Así que aquí me gustaría preguntar si mi comprensión es correcta y también publicar extractos que me ayudaron (aunque algunos de ellos se contradicen entre sí).

Sé que se han realizado muchos hilos sobre el tema, pero espero que este hilo no se cierre, ya que no creo que ninguno de los PO en los hilos mencionados también muestre todas las publicaciones relevantes (de varios hilos) que les ayudó a finalmente entenderlo.

De todas formas, así es como yo lo entiendo (si es posible, por favor abordar/responder a cada pregunta por separado):

a) Cuando aplicamos principio DIP a nivel marco, a continuación, utilizamos la expresión IoC? Y uno de los mecanismos para implementar DIP en nivel de armazón es DI?

b) El término COI no se aplica cuando ponemos en práctica DIP (usando DI) a un nivel nivel inferior/no-marco, en cuyo caso nosotros lo llamamos simplemente DI?

c) DI nos ayuda a achive DIP pasando el control de la creación real de la selección y de las dependencias a una tercera parte que es neutral a cualquiera de los otros 2 implicados?

d) Cuando se aplica DIP (usando DI) a nivel marco (COI), a continuación, tres tipos de controles obtienen invertida:

  1. El control de la interfaz. Ahora el módulo de alto nivel está controlando la interfaz que los módulos de nivel inferior deben cumplir en lugar de al revés

  2. El control del flujo. -> Ahora código marco (en lugar de usuario/código de negocio) controla el flujo del programa (en otras palabras - ellos (es decir, marco) que llame a (es decir, código de negocio))

  3. El control de la creación de dependencia. Esta inversión pasa el control de la creación real y la selección de dependencias a un tercero que es neutral para cualquiera de los otros 2 involucrados.

e) Cuando se aplica DIP (usando DI) en nivel no marco, a continuación, dos tipos de controles obtienen invertida:

  1. El control de la interfaz . módulo Ahora alto nivel es el control de la interfaz que los módulos de nivel inferior deben adherirse a en lugar de al revés

  2. El control de la creación de dependencia. Esta inversión pasa el control de la creación real y la selección de dependencias a un tercero que es neutral para cualquiera de los otros 2 involucrados.

?

Éstos son extractos que ayudaron:

Why so many terms to say the same thing? IoC and DIP

Inversión de Control es el término genérico. Inyección de dependencia es un tipo específico de la COI

...

Inversión de Control es cuando el marco/infraestructura invoca código de la aplicación, en lugar de al revés

...

puede hacer DI sin hacer IoC. Si se inyecta un ConsoleStringWriter en HelloWorld, realmente no pienso en esto como IoC porque no hay "framework" o "infraestructura".

Inversion of Control < Dependency Injection

Si acepta la definición de Fowler, Inversión de Control es una gran término más amplio que DI que cubre allframework uso donde se conecta en un marco, pero el marco es todavía está en control. Dependencia Inyección es una especialización de IoC que aplica IoC específicamente a administrar dependencias.

Where exactly is the difference between IoC and DI

COI es la capacidad de variar la ejecución de un contrato. DI es la capacidad de suministrar la implementación.

...

En las aplicaciones tradicionales, los desarrolladores podrían escribir el código de negocio y código de la arquitectura. El código comercial llamaría al código de marco para realizar tareas.Bajo un modelo de la COI, que "invertir" ese modelo y crear un marco que acepta módulos de negocio y los llama a realizar tareas

inyección de dependencia es una técnica (difícil de llamarlo un patrón, en realidad) de eliminar interna dependencias de las implementaciones por permitiendo que los objetos dependientes sean inyectados en la clase/método por un llamador externo . Los marcos de IoC usan la inyección de dependencia para suministrar los módulos de usuario y otro código dependiente a las rutinas del marco que "pegan todo junto". La inyección de dependencia se usa mucho en los marcos IoC porque ese es el mecanismo que les permite "Llamar al usted".

DIP vs. DI vs. IoC

DIP es el principio que nos guía hacia el DI. Básicamente, el objetivo es el acoplamiento suelto , y hay al menos dos formas de lograrlo. • Dependencia Localizador de inyección • Servicio

Does anyone have a good analogy for dependency injection?

La esencia de Inversión de Control (de los cuales la inyección de dependencias es una implementación) es la separación de la utilización de un objeto a partir de la gestión mismos .

Difference between ioc and dependency injection

El términos inyección de dependencias (DI) & Inversión de Control (COI) están generalmente usan de forma intercambiable para describir la misma patrón de diseño (aunque no todo el mundo está de acuerdo en ese punto, y algunos las personas tienden a aplicarlas de maneras ligeramente diferentes). El patrón originalmente era llamado IoC, pero Martin Fowler propuso el cambio a DI porque todos los marcos invierten el control de alguna manera y quería ser más específico sobre qué aspecto del control se estaba invirtiendo.

Inversion of Control vs Dependency Injection

Inversión de Control (IoC) significa que los objetos no creen otros objetos de los que dependen para hacer su trabajo. En su lugar, obtienen los objetos que necesitan de una fuente externa (por ejemplo, un archivo de configuración xml ). Dependency Injection (DI) significa que esto se hace sin la intervención del objeto, generalmente por un componente de marco que pasa parámetros de constructor y establece propiedades.

agradecimiento

+1

Tenga en cuenta que SO no es un foro, por lo que no tiene "hilos". Es un sitio de preguntas y respuestas, por lo que tiene preguntas y respuestas. Esta no es una distinción menor, ya que la diferencia en los formatos tiene una serie de consecuencias. Además, [programmers.SE] (http://programmers.stackexchange.com/) se adapta mejor a las preguntas conceptuales y de diseño. SO es para problemas de implementación. – outis

+3

[Este libro] (http://manning.com/seemann/) le dará todas las respuestas. – Steven

Respuesta

17

Bueno este es mi punto de vista:

DI Overview

DIP significa que programe contra una abstracción.Invierte el tipo de dependencia de una implementación a una abstracción.

IOC significa que alguien más es responsable de obtener la implementación para la abstracción dada. Normalmente, el consumidor utilizaría la nueva palabra clave para obtener una dependencia. Con IoC, invierte el control, de modo que el consumidor ya no es responsable de crear la instancia.

inyección de dependencias y Servicio de Localización son una parte de Inversión de Control. DIvsSL

Consulte también: https://stackoverflow.com/a/10053413/175399

+0

1 - De acuerdo con una de las citas, también podemos hacer DI sin IoC (cuando implementamos DIP vía DI a nivel no de marco). ¿Estarías de acuerdo? 2 - De todos modos, supongo que a, b, c y d son todos correctos? – user1483278

+1

1 Al usar IoC, el consumidor de una dependencia no es responsable de crear una instancia. Si creas la instancia con un marco o no, no importa. Debe separar los principios/metodologías de los marcos. – Rookian

+0

muchas gracias por su ayuda – user1483278

0

me han escrito las diferencias en mi [Blog]: http://dotnet-stuff.com/tutorials/dependency-injection/dependency-inversion-principle-dependency-injection-and-inversion-of-control-dip-ioc-and-di "Haga clic aquí para obtener actualizaciones" que ¿cómo podemos organizar Inversión de Control, Dependencia inversión Principio & inyección de dependencias. En resumen, podemos decir que--

En la parte superior se encuentra el principio de Inversión de Dependencia, que es una forma de diseñar software. No dice cómo hacer un módulo independiente. Inversion of Control (IoC) proporciona la forma de aplicar el principio DPI. Pero aún así, IoC no nos proporciona una implementación específica. Proporciona algunos métodos para que podamos invertir el control. Si queremos invertir el control mediante la inversión de enlace o la creación de dependencia, podemos lograrlo implementando la inyección de dependencia (DI).

Cuestiones relacionadas