La verdadera sabiduría reside en conocer la propia ignorancia.
Sócrates

Archivos del día 27 de March del 2008

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

[Lecturas Recomendadas] -20080327

elmundo.es

Marca.es

Kirai

Navegapolis

  • Decidir según la moda, algo que está al día de nuestro negocio, te aprendes unas palabras (Java, Struts, SOA…) y a decidir !

Historia de la humanidad

El Bar de Moe

Nueva locura propuesta por nuestro animador… podéis encontrar las seis diferencias con el original ?

Pues claro !!! Tranchoman está de incógnito !!! Edgar no tiene barriga !!! Sigue buscando…