2010-10-12 10 views
45

estoy leyendo teoría sobre dependencia de la inversión y desacoplamiento y no puedo ver la diferencia entre los dos.Diferencia entre "Inversión de Control", "inversión de dependencia" y "desacoplamiento"

inversión de la dependencia habla de desacoplamiento de componentes funcionales para que los componentes de nivel superior no dependan de componentes de nivel inferior.

Desacoplamiento habla de lo mismo y de cómo lograrlo. Pero luego tenemos IoC Containers que ensucian las cosas aún más. ¿Por qué no se les llama más bien Dependency Inversion Containers o incluso mejor Dependency Injection Containers, porque sirven el acoplamiento en tiempo de ejecución de los componentes independientes?

Luego tenemos Inversión de control. Básicamente es lo mismo que Dependency Inversion ¿no es así? ¿Por qué hay tres términos que describen lo mismo? ¿O estoy ciego?

  1. ¿Cuál es la diferencia entre los tres?
  2. ¿Qué tiene que hacer IoC en los Contenedores de IoC?
+0

@Anton Gogolev: El desacoplamiento se escribe con el extra "o": http://en.wikipedia.org/wiki/Decoupling#Software_Development –

Respuesta

46

Desacoplamiento es un principio muy general aplicable en muchos campos. La inversión de dependencia es una forma específica de desacoplamiento en la que desacopla los niveles superiores de su sistema de los niveles inferiores separándolos en bibliotecas y usando interfaces. Esto le permite reemplazar partes de menor nivel de su sistema sin una repetición importante.

Por ejemplo, en lugar de que las partes de nivel superior del sistema creen instancias concretas de las clases de nivel inferior, un contenedor IoC se puede usar para desacoplar cómo se crean los objetos.

La inversión de control es un principio de diseño utilizado por las bibliotecas de marcos que permite que el marco recupere el control de la aplicación. Es decir, un marco de ventana puede volver a llamar al código de la aplicación cuando se producen ciertos eventos de interfaz de usuario. Martin Fowler usa el término Hollywood Principio como en No nos llame, lo llamaremos. El desacoplamiento es una parte importante de la inversión de control.

Pero, ¿qué tiene que ver con IoC contenedor que ver con la inversión de control? To quote Martin Fowler:

Inversion of Control es un término demasiado genérico, por lo que a las personas les resulta confuso. Como resultado, con una gran cantidad de discusiones con varios defensores de IoC nos decidimos por el nombre Dependency Injection.

(Tenga en cuenta que Martin Fowler habla de la inyección de dependencias , no dependencia de la inversión.)

contenedor IoC Una ayuda para implementar la inyección de dependencia y tal vez un término más adecuado sería la dependencia contenedor de inyección. Sin embargo, el nombre del contenedor IoC parece pegarse. La inyección de dependencia es un componente importante en la inversión de dependencia, pero el uso de contenedores de IoC para la inyección de dependencia puede ser confuso ya que la inversión del control es un principio más amplio y más genérico.

Señala que la nomenclatura no es muy uniforme, pero no debería ser una gran sorpresa, ya que estos términos se han inventado y utilizado independientemente, aunque se superponen.

+0

Estoy de acuerdo, aunque no utilizaría el término contenedor IoC porque, como usted dice, no es realmente correcto. Creo que no es importante seguir el esquema de nomenclatura popular (incorrecto) aquí, ya que cualquiera que entienda el principio de los contenedores DI debería ser capaz de entender el nombre correcto. –

38

inyección de dependencias logra desacoplamiento usando Inversión de Control.

+0

no podría ser más sencillo. – Pradeep

+3

¿se pensó ** Inversion of Control ** o es ** a través de Dependency Inversion **? Yo diría que es el último. –

+1

-1 esto realmente * acopla * el término "inyección de dependencia" a "inversión de control". La inyección de dependencia es una técnica de desacoplamiento por sí misma. –

9

puedo encontrar la siguiente explicación de DIP in the Wild artículo sobre martinfowler.com fácil de entender (aquí DI = Inyección de Dependencia, DIP = Dependencia Inversión Principio, la COI = Inversión de Control):

DI es acerca de cómo se objeto adquiere una dependencia. Cuando una dependencia es proporcionada externamente, entonces el sistema usa DI. IoC se trata de quién inicia la llamada. Si su código inicia una llamada, no es IoC, si el contenedor/sistema/biblioteca vuelve a llamar al código que proporcionó , es IoC.

DIP, por otro lado, es aproximadamente el nivel de abstracción en los mensajes enviados desde su código a lo que está llamando. (...) DI está sobre el cableado , IoC está sobre la dirección, y DIP está sobre la forma [del objeto de quien depende el código].

+2

"DI es sobre cableado, IoC es sobre dirección, y DIP es sobre forma [del objeto del que depende el código ]. "fue una buena frase;) –

+0

De acuerdo - Esta pequeña respuesta aquí tiene más sentido para mí. – ppumkin

Cuestiones relacionadas