viernes, 24 de julio de 2009

Inyección de dependencias


Originalmente, La inyección de dependencia se la llamaba de otra forma: inversión de control (IoC). Pero en un artículo escrito por Martin Fowler preguntaba qué aspecto del control se estaba invirtiendo. Llego a la conclusión de que la adquisición de la dependencia lo que se invertía. Basándose en esa revelación, acuño la frase “inyección de dependencia”, un término que describe mejor lo que ocurre.

Pero ahora bien ¿ qué es la inyección de dependencia? La wikipedia nos dice algo así: http://es.wikipedia.org/wiki/Inyección_de_dependencias

Cualquier aplicación no trivial está formada por dos o más clases que colaboran entre sí para realizar alguna lógica. Tradicionalmente cada objeto se hacía cargo de obtener sus propias referencias a los objetos a los cuales colaboraba (sus dependencias). Esto lleva a código acoplado y difícil de probar.

Cuando se aplica inyección de dependencia le decimos a una entidad externa que provea las dependencias a los objetos. Esto nos resuelve el problema del acoplamiento.

El acoplamiento es un mal necesario ya que sin él los objetos no podrían interactuar para resolver problemas, pero cuan menor sea el acoplamiento es más reutilizable, comprobable y flexible.

La ventaja clave de inyección de dependencia es el acoplamiento débil. Si un objeto solo conoce sus dependencias mediante su interfaz (no su implementación o como fueron definidos) entonces la dependencia puede intercambiarse con una implementación diferente sin que el objeto dependiente sepa la diferencia.

Por ejemplo si defino una interfaz la implementación de la misma pude ser un objeto plano, web service, objeto remoto, etc.

Inyección de dependencia es la llave para minimizar el acoplamiento.