Inyección de dependencias

En Informática, Inyección de Dependencias (en inglés Dependency Injection, DI) es un patrón de diseño orientado a objetos, en el que se suministran objetos a una clase en lugar de ser la propia clase quien cree el objeto. El término fue acuñado por primera vez por Martin Fowler.

Contenido

Historia

En los comienzos de la programación, los programas eran lineales y monolíticos. El flujo de ejecución era simple y predecible, ejecutándose línea tras línea.

Aparecieron dos conceptos para estructurar el código: la modularidad y la reutilización de los componentes: se crean bibliotecas de componentes reutilizables. El flujo se complica, saltando de componente a componente, y aparece un nuevo problema: la dependencia (acoplamiento) entre los componentes.

El problema de la dependencia se empieza a considerar lo suficientemente importante como para definir nuevos conceptos en el diseño :

  • Inversión de control (IoC, por sus siglas en inglés)
  • Inyección de Dependencias (Dependency Injection, DI) que es una forma de inversión de control.

Implementación del patrón en Java

La forma habitual de implementar este patrón es mediante un "Contenedor DI" y objetos POJO. El contenedor inyecta a cada objeto los objetos necesarios según las relaciones plasmadas en un fichero de configuración.

Típicamente este contenedor es implementado por un framework externo a la aplicación (como Spring o uno propietario), por lo cual en la aplicación también se utilizará inversión de control al ser el contenedor (almacenado en una biblioteca) quien invoque el código de la aplicación. Ésta es la razón por la que los términos de inversión de control e inyección de dependencias se confunden habitualmente entre sí.

Ilustración de código usando Java

El siguiente ejemplo muestra una implementación sin inyección de dependencias.

public class Vehiculo {
 
    private Motor motor = new Motor();
 
    /** @retorna la velocidad del vehículo*/
    public Double enAceleracionDePedal(int presionDePedal) {
        motor.setPresionDePedal(presionDePedal);
        int torque = motor.getTorque();
        Double velocidad = ... //realiza el cálculo
        return velocidad;
    }
 
}
 
//se omite la clase Motor ya que no es relevante para este ejemplo

La implementación de arriba necesita crear una instancia de Motor para calcular su velocidad. El siguiente ejemplo sencillo muestra una implementación usando inyección de dependencias.

public class Vehiculo {
 
    private Motor motor = null;
 
    public setMotor(Motor motor){
        this.motor = motor;
    }
 
    /** @retorna la velocidad del vehículo*/
    public Double enAceleracionDePedal(int presionDePedal) {
        Double velocidad = null;
        if (null != motor){
         motor.setPresionDePedal(presionDePedal);
         int torque = motor.getTorque();
         velocidad = ... //realiza el cálculo
        }   
        return velocidad; 
    }
}
 
//se omite la clase Motor ya que no es relevante para este ejemplo
 
public class VehiculoFactory {
 
    public Vehiculo construyeVehiculo() {
        Vehiculo vehiculo = new Vehiculo();
        Motor motor = new Motor();
        vehiculo.setMotor(motor);
        return vehiculo;
    }
 
}

En este ejemplo VehiculoFactory representa al proveedor. Es una aplicación sencilla del patrón de diseño fábrica que hace posible que la clase Vehículo no requiera saber cómo obtener un motor por sí misma, sino que es la responsabilidad de VehiculoFactory.

Véase también

Enlaces externos


Wikimedia foundation. 2010.

Mira otros diccionarios:

  • Inversión de Control — Saltar a navegación, búsqueda Inversión de control (Inversion of Control en inglés, IoC) es un método de programación en el que el flujo de ejecución de un programa se invierte respecto a los métodos de programación tradicionales, en los que la… …   Wikipedia Español

  • Inversión de control — (Inversion of Control en inglés, IoC) es un método de programación en el que el flujo de ejecución de un programa se invierte respecto a los métodos de programación tradicionales, en los que la interacción se expresa de forma imperativa haciendo… …   Wikipedia Español

  • MyBatis — Desarrollador El equipo MyBatis http://www.mybatis.org Información general Última versión estable 3.0.6 9 de octubre de 2011; …   Wikipedia Español

  • Google Guice — es un framework de inyección de dependencias que puede ser utilizado en aplicaciones hechas con Java en donde la relación o dependencia entre objetos de negocio necesita ser administrada o mantenida. Debido a que Guice usa Java en su versión 5.0… …   Wikipedia Español

  • Ruby — Este artículo trata sobre el lenguaje de programación. Para la notación de ayuda a la lectura, véase Carácter ruby. Ruby Desarrollador(es) Comunidad de desarrolladores de Ru …   Wikipedia Español

  • Cheat engine — Saltar a navegación, búsqueda Cheat Engine, comúnmente abreviado como CE, es un escáner de memoria libre / Hex Editor / Depurador creado por Dark Byte (aka Eric Heijnen) para el sistema operativo [[{Windows]].Cheat Engine se Utiliza para hacer… …   Wikipedia Español

  • Elaboración de cerveza — Saltar a navegación, búsqueda …   Wikipedia Español

  • Lada — La versión actual de este artículo o sección parece estar escrita a modo de publicidad. Para satisfacer los estándares de calidad de Wikipedia y procurar un punto de vista neutral, este artículo o sección puede requerir limpieza. Por favor… …   Wikipedia Español

  • AgustaWestland AW101 — EH101 / AW101 Merlin Un Merlin HM.1 de la Royal Navy en la Royal International Air Tattoo, en Inglaterra. Tipo Helicóptero utilitario …   Wikipedia Español

  • Puerto Rico — Para otros usos de este término, véase Puerto Rico (desambiguación). Estado Libre Asociado de Puerto Rico Commonwealth of Puerto Rico Territorio no incorporado de los Estados Unidos …   Wikipedia Español


Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”

We are using cookies for the best presentation of our site. Continuing to use this site, you agree with this.