He estado buscando usar el marco de Typhoon para la inyección de dependencia esta semana. Entiendo que separar la construcción de objetos es beneficioso para reemplazar componentes arbitrarios con simulacros durante las pruebas unitarias, y hasta ahora he visto beneficios de esto solo.
Pero no puedo evitar pensar que donde antes tenía una clase de controlador de vista enorme que tenía decenas de importaciones de encabezado, ahora tengo una clase de fábrica enorme que tiene decenas de importaciones de encabezado. ¿Se supone que debo evitar tener una clase de fábrica masiva?
dependency-injection
Víctor
fuente
fuente
Respuestas:
La inyección de dependencia simplemente ayuda a definir cómo un objeto sabe acerca de otro objeto dependiente. No le ayudará a reducir la complejidad general del sistema. Si necesitaba decenas de importación antes de DI, aún necesitará decenas de importaciones después. La diferencia es que estas importaciones se realizarán en una ubicación (clase) que tenga más sentido (fábrica, constructor, etc.).
Al permitir que se proporcionen las dependencias a través de un constructor o método, se le da la flexibilidad de proporcionar un objeto dependiente diferente, pero aún válido, a su clase y aumentar la cohesión de dicha clase al eliminar las preocupaciones.
Hay varios principios que son similares y que a menudo se usan juntos: Inyección de dependencia (DI), Inversión de control (IoC) y Principio de inversión de dependencia (DIP)
De este artículo http://martinfowler.com/articles/dipInTheWild.html
fuente
La inyección de dependencia no reduce la complejidad, pero aumenta la capacidad de manipulación a través de la separación de preocupaciones y el acoplamiento reducido.
Se supone que debes evitar las clases "enormes", punto. Digamos que divide el controlador de vista en clases más pequeñas y más fáciles de mantener. Ahora todos ellos son responsables de hacerse con sus dependencias. DI le ayuda a trasladar esta gestión de dependencias de todas esas clases a una clase de fábrica / configuración que solo es responsable de la gestión de dependencias; consulte el Principio de responsabilidad única. Y aunque sin duda será mucho menos "enorme" que el controlador de vista original, si se vuelve demasiado grande, siempre tiene la opción de dividirlo en clases más pequeñas de gestión de dependencias que son responsables de las diferentes partes de la aplicación.
fuente
En palabras simples:
La inyección de dependencia mueve la complejidad a donde hace menos daño.
EDITAR para @gnat: DI no solo está moviendo la complejidad a una clase separada, sino que la está moviendo a donde causa menos daño.
fuente