qué programacion ioc inyección inyeccion inversión formas explicacion dependencias dependencia control dependency-injection inversion-of-control

dependency-injection - programacion - inyeccion de dependencias php



Inversión de control frente a inyección de dependencia con citas seleccionadas: ¿es correcto mi entendimiento? (2)

He 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" de que cómo podemos organizar Inversión de Control, Inyección de Dependencia Principio e Inyección de Dependencia. En resumen, podemos decir que--

En la parte superior está 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).

He leído varios temas que explican la diferencia entre IoC y DI, y aunque muchas de las explicaciones se contradijeron entre sí, creo que todavía me ayudaron a entender la diferencia.

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

Sé que se han hecho 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 ayudaron ellos finalmente lo entienden.

De todos modos, así es como lo entiendo (si es posible, por favor dirígete / responde cada pregunta individualmente):

a) Cuando aplicamos el principio DIP en el nivel del marco , ¿usamos el término IoC ? Y uno de los mecanismos para implementar DIP a nivel de marco es DI ?

b) El término IoC no se aplica cuando implementamos DIP (usando DI ) a un nivel inferior / no marco , en cuyo caso simplemente lo llamamos DI ?

c) DI nos ayuda a lograr DIP pasando el control de la creación real y la selección de dependencias a un tercero que sea neutral para cualquiera de los otros 2 involucrados?

d) Cuando se aplica DIP (usando DI ) a nivel de estructura (IoC), se invierten tres tipos de control:

  1. El control de la interfaz. Ahora el módulo de alto nivel está controlando la interfaz a la que los módulos de nivel inferior deben adherirse en lugar de a la inversa

  2. El control del flujo. -> Ahora el código de la estructura (en lugar del código de usuario / empresa ) controla el flujo del programa (en otras palabras, ellos (es decir, el marco) lo llaman a usted (es decir, el código comercial) )

  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 ) a nivel no de armazón , se invierten dos tipos de control:

  1. El control de la interfaz. Ahora el módulo de alto nivel está controlando la interfaz a la que los módulos de nivel inferior deben adherirse en lugar de a la inversa

  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.

?

Aquí hay extractos que ayudaron:

¿Por qué tantos términos para decir lo mismo? IoC y DIP

Inversión de control es el término genérico. Inyección de dependencia es un tipo específico de IoC

...

Inversión de control es cuando el marco / infraestructura invoca el código de la aplicación, y no 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 un "framework" o "infraestructura".

Inversión de Control <Inyección de Dependencia

Si acepta la definición de Fowler, Inversión de control es un término mucho más amplio que DI que cubre el uso de todo el marco en el que se conecta a un marco, pero el marco todavía está bajo control. Dependency Injection es una especialización de IoC que aplica IoC específicamente para administrar dependencias.

Donde exactamente está la diferencia entre IoC y DI

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

...

En aplicaciones tradicionales, los desarrolladores escribirían códigos comerciales y códigos de marcos. El código comercial llamaría entonces al código de marco para realizar tareas. Bajo un modelo IoC, "invierte" ese modelo y crea un marco que acepta módulos comerciales y los llama para realizar tareas

La Inyección de Dependencia es una técnica (difícil de llamar, en realidad, un patrón) de eliminar las dependencias internas de las implementaciones al permitir que una persona que llama externamente inyecte objetos dependientes en la clase / método. Los marcos de IoC usan la inyección de dependencia para suministrar módulos de usuario y otro código dependiente a rutinas de marco que "pegan todo". La inyección de dependencia es utilizada en gran medida por los frameworks IoC porque ese es el mecanismo que les permite "Call You".

DIP vs. DI vs. IoC

DIP es el principio que nos guía hacia DI. Básicamente, el objetivo es el acoplamiento flexible, y hay al menos dos formas de lograrlo. • Inyección de dependencia • Localizador de servicio

¿Alguien tiene una buena analogía para la inyección de dependencia?

La esencia de Inversion of Control (del cual Dependency Injection es una implementación) es la separación del uso de un objeto del manejo del mismo.

Diferencia entre ioc e inyección de dependencia

Los términos Inyección de dependencia (DI) y Inversión de control (IoC) generalmente se utilizan indistintamente para describir el mismo patrón de diseño (aunque no todos están de acuerdo con ese punto, y algunas personas tienden a aplicarlos de maneras ligeramente diferentes). El patrón originalmente se llamaba 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.

Inversión de control frente a inyección de dependencia

Inversión de control (IoC) significa que los objetos no crean otros objetos de los que dependen para hacer su trabajo. En cambio, obtienen los objetos que necesitan de una fuente externa (por ejemplo, un archivo de configuración xml). La Inyección de Dependencia (DI) significa que esto se hace sin la intervención del objeto, generalmente por un componente del marco que pasa los parámetros del constructor y las propiedades del conjunto.

gracias


Bueno, este es mi punto de vista:

DIP significa que programa 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 usarí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.

La inyección de dependencias y la ubicación del servicio son parte de Inversion of Control .

Ver también: https://.com/a/10053413/175399