Trabajamos no solo para producir, sino para dar valor al tiempo.
Eugène Delacroix

Inversión de Control (IoC) – Inyección de dependencias (DI)

En los comienzos de la programación, los programas eran lineales y monolíticos. El flujo de ejecución era simplemente ejecutar línea tras linea.

Aparecieron dos conceptos que revolucionaron la programación: la modularidad y la reutilización de los componetes: se crean librerías de componentes reutilizables. El flujo se complica, saltando de componente a componente, y aparece un nuevo problema: la dependencia (acoplamiento) entre nuestros componentes.

El problema se empieza a considerar lo suficientmente importante como para definir nuevos conceptos en el diseño :

  • Inversion of Control (IoC)
  • Dependency Injection (DI)

La utilización de interfaces y la aparición de los frameworks es un primer paso para minimizar estas dependencias entre componentes, aunque pagamos un precio: la configuración en ficheros xml se empieza a volver monolítica, difícil de mantener, crítica y es fácil cometer errores.

Inversion of Control

Es una técnica que inverte el flujo tradicional. Lo tradicional es que el código que implementes llame a las librerías; la inversión de control ocurre cuando son las librerías las que llaman a tu código.

En Spring, la inversión de control consiste en ceder el control a una entidad externa a la aplicación, llamada "Contenedor", que se encargará de gestionar las instancias (así como sus creaciones y destrucciones).

Dependency Injection

Es un término comunmente confundido con el anterior.

En un escenario en el que utilizamos IoC, delegamos en una entidad "Contenedor" no solo la gestión de las instancias, sino la inyección de las sub-partes (dependencias). Si una venta se compone de un cliente y un producto, al instanciar un objeto venta la DI le inyecta directamente su cliente y su producto específicos.

Un ejemplo podría ser una cadena de montaje:

Tradicionalmente se encendía la cinta de montaje cuando se necesitase (instanciamos un objeto), los componentes eran transportados por la cinta y cada operario ensamblaba secuencialmente un componente para obtener un producto final (el objeto instanciado con todas sus propiedades concretas), y finalmente se apagaba la cinta cuando ya no era necearia (destruimos el objeto).

Utilizando IoC y DI, es un robot ("Contenedor") quien detecta cuando se necesita un objeto, pone automáticamente en marcha una cinta, ensambla sus partes y nos devuelve nuestro objeto final volviendo a su estado de stand-by hasta el siguiente pedido.

Más información

No related posts.

9 Comentarios hasta el momento »

  1. Lennon Shimokawa dijo

    27 de March del 2008 a las 8:58 pm

    Hola Jerónimo, muy buen post, para aclarar los términos de Inversión of Control y Depedency Injection, este último término fue acuñado por Martin Fowler para referirse más específicamente a “¿que aspecto estamos invirtiendo?” en la Inversión de Control. Lo que se invierte son el manejo de las depedencias de los objetos, de ahi nace el término Dependency Injection.

    http://martinfowler.com/articles/injection.html

  2. yoyoooyoy dijo

    28 de March del 2008 a las 8:11 am

    Gracias Lennon,

    creo que existe una gran confusión con estos conceptos porque todos nos hemos preocupado por él después de Spring y pensamos que lo que hace Spring es IoC y DI y no hay más :)

  3. Lycka Bonita » Spring - MVC : Capa de negocio dijo

    4 de July del 2008 a las 8:37 am

    [...] ahora vamos a sacar uso de la Inyección de Dependencias de [...]

  4. Renato dijo

    1 de December del 2008 a las 11:51 am

    Buenos días hace algo de tiempo recuerdo haber leido este post algo rapido, y bueno hoy ya con más tiempo estuve viendo tu blog, sin embargo te agradecería muchisimo si pudieras darme los links de tu Lyckapedia (/jcs/wiki), estaba todo muy bien explicado :( y ahora ya no se puede acceder a: Inyección de Dependencias, de control y toda la información que tenias.
    Te agradeceria infinitamente ese favor, espero se pueda =)

    Por cierto, muy interesante y diverso tu blog :)

  5. yoyoooyoy dijo

    1 de December del 2008 a las 1:25 pm

    Gracias Renato, todo esto lleva bastante trabajo y se agradece que a la gente le guste.

    Respecto a la Lyckapedia lleva un tiempo caída tras sufrir un ataque de spam, y de momento sigue sin fecha de vuelta. Intentaré recuperar un backup, instalarla en un ordenador local y te pasaría el artículo vía mail.

    Saludos y gracias.

  6. Renato dijo

    2 de December del 2008 a las 12:20 pm

    Te estare muy agradecido por eso :)

  7. prietopa dijo

    12 de January del 2009 a las 11:37 am

    A mi me gustaria tener tambien ese articulo, sino te importa, ¿me lo puedes enviar por correo?.

    Muchas gracias

  8. yoyoooyoy dijo

    12 de January del 2009 a las 1:55 pm

    La Lyckapedia sigue caida por motivos técnicos, pero acabo de recordar que estos dos artículos en concreto los subi a la wikipedia :

    * http://es.wikipedia.org/wiki/Inyecci%C3%B3n_de_dependencias
    * http://es.wikipedia.org/wiki/Inversi%C3%B3n_de_Control

    Sigo trantado de arrancarla :)

  9. Emanuel dijo

    25 de July del 2009 a las 2:27 am

    En este post se explica mejor el asunto:

    http://emanuelpeg.blogspot.com/2009/07/inyeccion-de-dependencias.html

    Saludos!!

Comentarios RSS · TrackBack URI

Dejanos tu Comentario

Nombre: (Requerido)

E-Mail: (Requerido)

Sitio WEB:

Comentario:

Comenta