2012-03-15 21 views
9

Actualmente estoy refactorizando mi biblioteca PHP basada en Zend Framework para que no use un localizador de servicios para (constructor) inyección de dependencia (DI). Siento que mejora mucho mi código, pero no estoy seguro si debería inyectar todas las dependencias. Un localizador de servicios parece más fácil para las dependencias que se usan mucho y son inespecíficas. Tengo las siguientes dependencias a las que todavía accedo usando un localizador de servicios:Inyección de dependencia: ¿debería inyectar todo o usar un localizador de servicios para algunos objetos?

  1. Un objeto Zend_Translate (necesito traducir mensajes en todas partes).
  2. objeto A Zend_Locale (almacena el idioma actual)
  3. Un Zend_Config objeto (un montón de cosas son configurables por el INI-archivo)
  4. Las instancias de clases de utilidad (por matriz y la manipulación de cadenas)

Si inyecté estas dependencias, desordenarían mis constructores y distraerían de las dependencias específicas. Para las pruebas, puedo configurar estas dependencias en mi localizador de servicios antes de ejecutar las pruebas. El pragmático en mí dice que me está yendo bien, pero el purista dice que debo ir todo el tiempo con DI.

¿Recomendaría DI para este tipo de objetos o no?

+3

no se pueden responder. Al parecer, sabes que hay pros y contras. Depende de usted tomar una decisión consciente. – Gordon

+0

Bueno, la pregunta es: ¿recomendaría DI para eso o no, por lo que la pregunta es clara en ese sentido. – markus

+0

Hay muy pocas preguntas que voté y VOTO para cerrar. Es una pregunta excelente, pero parece que depende de usted tomar una decisión. Es su aplicación y conoce los pros y los contras del tema. –

Respuesta

18

Cuando se trata de la preocupación sobre el desorden de los constructores, lo más probable es a code smell that the classes are violating el Single Responsibility Principle. La inyección de constructores es muy beneficiosa aquí porque hace que esto sea mucho más obvio.

Algunas personas también se preocupan por inyectar dependencias que solo se usan raramente, pero that's not a problem either. Cuando se trata de crear gráficos de objetos, el rendimiento rara vez es un problema, e incluso si lo es, el patrón Virtual Proxy puede arreglarlo.

En resumen, no hay razón para usar un Localizador de servicios. Siempre hay una mejor alternativa que implica la inversión adecuada del control.

+2

Verdadero. Sin embargo, hay situaciones en las que el uso de un Localizador de servicios es la única forma de realizar inversiones de dependencia. Por ejemplo, cuando una clase está siendo instanciada por un marco de terceros que no admite Dependency Injection. –

Cuestiones relacionadas