2012-08-07 30 views
13

¿Cómo es el patrón de estrategia diferente de la inyección de dependencia?Patrón de estrategia frente a inyección de dependencia

es decir, por debajo de lo que puede hacer con el patrón de la estrategia:

class Foo{ 
    private readonly ISortAlgo _sortAlgo; 

    public Foo(ISortAlgo sortAlgo) 
    { 
    _sortAlgo = sortAlgo; 
    } 

    public void Sort() 
    { 
    _sortAlgo.sort(); 
    } 

} 

con DI se puede hacer lo mismo, en esencia lo que puede tener el constructor, organismo, etc. inyección de interfaz. y daría el mismo efecto que el patrón de Estrategia. Soy consciente de que DI también tiene otros principios, como el acoplamiento flojo, la capacidad de prueba, el cableado, etc.

En términos de implementación, no veo mucha diferencia.

¿Cuál es la diferencia entre el patrón de estrategia y DI?

+0

Las respuestas actuales no son especialmente satisfactorias. Mejores respuestas se centrarían pragmáticamente en las diferencias en las cuales los comportamientos variables se inyectan en tiempo de ejecución. – Mario

Respuesta

14

En primer lugar, inyección de dependencia tiene no sólo inyección constructor como método para inyectar, pero también propiedad, método de inyección de contexto y ambiente.

En segundo lugar, stategy define el comportamiento , por lo que el cliente puede seleccionar uno especial que coincide en sus necesidades. Mientras que la inyección de dependencia funciona con abstracción de dependencias externas.

+1

+1. Por mencionar * comportamiento *. –

+1

+1 para un buen resumen. Creo que cierta confusión se debe al hecho de que los dos DP usan los mismos mecanismos pero tienen diferente alcance e intención. –

12

El Strategy pattern permite seleccionar el comportamiento de un objeto (es decir, sus algoritmos) en tiempo de ejecución, donde como Dependency injection permite la eliminación de dependencias codificadas.

Por lo tanto, no son competidores. Sus implementaciones pueden ser similares, sin embargo, su objetivo es diferente.

+1

"pasó a un método, pero esto no se consideraría como DI". Corrección: DI viene en múltiples formas. Constructor es la forma más común (y, a menudo, la mejor opción), pero la inyección de método también es una forma de Inyección de Dependencia. – Steven

+0

¿Consideraría también que es DI si se pasó a un método solo para realizar alguna acción (el caso que tenía en mente) y no para inicializar una clase? –

+0

La dependencia se inyecta en el método, por lo que sí, es una forma de inyección de dependencia. Sin embargo, la inyección de métodos suele ser una forma muy frágil de inyectar dependencias, ya que la dependencia tiene que ser parte del contrato, y será engorroso pasar las dependencias de un método a otro para descifrar la pila de llamadas. – Steven

6

La estrategia le permite cambiar el comportamiento de un objeto. DI es un patrón de diseño que le permite depender de las abstracciones.

4

Dependency Injection es un patrón que le ayuda a dividir la lógica de la forma de construcción que es ideal para las pruebas y la extensibilidad del sistema. También se puede usar en el lugar donde caben otros patrones, p. Semifallo.

El patrón de estrategia resuelve un problema diferente. Permite que el tiempo de ejecución elija el algoritmo, en OOP a través del polimorfismo.

Sin duda, pueden funcionar juntos.

Cuestiones relacionadas