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:
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
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))
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:
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
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 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
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
[Este libro] (http://manning.com/seemann/) le dará todas las respuestas. – Steven