Looking for design-patterns Answers? Try Ask4KnowledgeBase
Looking for design-patterns Keywords? Try Ask4Keywords

Design patternsInyección de dependencia


Introducción

La idea general detrás de la inyección de dependencia es que usted diseña su aplicación en torno a componentes débilmente acoplados mientras se adhiere al principio de inversión de dependencia. Al no depender de implementaciones concretas, permite diseñar sistemas altamente flexibles.

Observaciones

La idea básica detrás de la inyección de dependencia es crear un código acoplado de forma más flexible. Cuando una clase, en lugar de crear sus propias dependencias, toma sus dependencias, la clase se vuelve más sencilla de probar como una unidad ( prueba de unidad ).

Para profundizar más en el acoplamiento flexible, la idea es que las clases se vuelvan dependientes de las abstracciones, en lugar de concreciones. Si la clase A depende de otra clase concreta B , entonces no hay pruebas reales de A sin B Si bien este tipo de prueba puede estar bien, no se presta al código de unidad comprobable. Un diseño débilmente acoplado definiría una abstracción IB (como ejemplo) de la cual dependería la clase A IB puede ser burlado para proporcionar un comportamiento comprobable, en lugar de confiar en la implementación real de B para poder proporcionar escenarios comprobables a A

Ejemplo estrechamente acoplado (C #):

public class A
{
    public void DoStuff()
    {
        B b = new B();
        b.Foo();
    }
}

En lo anterior, la clase A depende de B No hay pruebas A sin el hormigón B Si bien esto está bien en un escenario de pruebas de integración, es difícil realizar A prueba unitaria A

Una implementación más holgada de lo anterior podría ser:

public interface IB
{
    void Foo();
}

public class A
{
    private readonly IB _iB;

    public A(IB iB)
    {
        _iB = iB;
    }

    public void DoStuff()
    {
        _b.Foo();
    }
}

Las dos implementaciones parecen bastante similares, sin embargo hay una diferencia importante. La clase A ya no depende directamente de la clase B , ahora depende de IB . La Clase A ya no tiene la responsabilidad de renovar sus propias dependencias; ahora debe proporcionarlas a A

Inyección de dependencia Ejemplos relacionados