2011-01-04 17 views

Respuesta

59

En el uso común, los términos se han convertido en algo sinónimos. La idea original de IoC - Inversion of Control - estaba muy relacionada con el "Principio de Hollywood:" No nos llame, lo llamaremos.

En las aplicaciones tradicionales, los desarrolladores escribirían el código comercial y el código de la estructura. El código comercial llamaría entonces al código de marco para realizar tareas. Bajo un modelo de IoC, "invierte" ese modelo y crea un marco que acepta módulos comerciales y los llama para realizar tareas. Este principio se exhibe en varios marcos de desarrollo, incluido el antiguo Smart Client Software Factory y el más reciente Prism (o aplicaciones compuestas para WPF/Silverlight). En estos modelos, los módulos de interfaz de usuario se registran en un contenedor IoC y se cargan según sea necesario según la configuración y las acciones del usuario. Si bien son poderosos, estos modelos también tienden a tener una curva de aprendizaje muy empinada.

Dependency Injection es una técnica (realmente difícil de llamar, en realidad, un patrón) de eliminar dependencias internas de las implementaciones al permitir que un llamador externo inserte objetos dependientes en la clase/método. Los marcos de IoC usan la inyección de dependencia para proporcionar 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".

IoC Containers, como Castle Windsor y Structure Map, ayudan con la inyección de dependencias al proporcionar instancias automáticas y administración del ciclo de vida de las clases que registra, incluida la creación de instancias automáticas y los parámetros requeridos por las clases registradas. Todo esto hace que sea más fácil usar la inyección de dependencia, pero no es obligatorio.

Dependency Injection es un mecanismo de flexibilidad que maximiza la dependencia de las interfaces al tiempo que minimiza la dependencia en la implementación específica. En consecuencia, los sistemas que usan inyección de dependencia pueden admitir clases de implementación "conectables" que se pueden usar dependiendo de las circunstancias. Un beneficio muy grande de esta "capacidad de conexión" es que hace que la creación de pruebas unitarias sea mucho más fácil. Puede simular un objeto en la interfaz necesaria e inyectarlo en su objeto de prueba.

Por lo tanto, IoC es realmente el principio más amplio y DI es una técnica fundamental dentro. Los sistemas de IoC (principio de Hollywood) tienden a ser bastante complejos, pueden ser difíciles de entender y, por lo tanto, tienen curvas de aprendizaje pronunciadas. DI, por otro lado, es una buena práctica para los desarrolladores cotidianos. Tiendo a preferir que me resulte comprensible y claro más que genial, pero complejo.

+0

+1 Buena explicación –

+0

¡Muy buena explicación! ¡Gracias! –

+0

realmente útil! –

41

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

DI es la capacidad de suministrar la implementación.

+0

¡Esta es la mejor explicación de todas, gracias! – formatc

Cuestiones relacionadas