El año pasado, creé un nuevo sistema usando Inyección de dependencia y un contenedor de COI. ¡Esto me enseñó mucho sobre DI!
Sin embargo, incluso después de aprender los conceptos y patrones adecuados, considero que es un desafío desacoplar el código e introducir un contenedor IOC en una aplicación heredada. La aplicación es lo suficientemente grande como para que una implementación real sea abrumadora. Incluso si se entendió el valor y se concedió el tiempo. ¿A quién se le concede tiempo para algo como esto?
¡El objetivo, por supuesto, es llevar las pruebas unitarias a la lógica comercial!
Lógica empresarial que se entrelaza con llamadas de base de datos que evitan las pruebas.
He leído los artículos y entiendo los peligros de la inyección de dependencia del pobre como se describe en este artículo de Los Techies . Entiendo que realmente no desacopla nada.
Entiendo que puede involucrar mucha refactorización de todo el sistema ya que las implementaciones requieren nuevas dependencias. No consideraría usarlo en un nuevo proyecto con ninguna cantidad de tamaño.
Pregunta: ¿Está bien usar la DI de Poor Man para introducir la capacidad de prueba en una aplicación heredada y comenzar a rodar?
Además, ¿está utilizando la DI de Poor Man como un enfoque de base para la verdadera inyección de dependencia una forma valiosa de educar sobre la necesidad y los beneficios del principio?
¿Puede refactorizar un método que tiene una dependencia de llamada a la base de datos y abstraer esa llamada detrás de una interfaz? Simplemente tener esa abstracción haría que ese método sea comprobable ya que una implementación simulada podría pasarse a través de una sobrecarga del constructor.
En el futuro, una vez que el esfuerzo gane simpatizantes, el proyecto podría actualizarse para implementar un contenedor de COI y los constructores estarían allí para captar las abstracciones.
I consider it a challenge to decouple code and introduce an IOC container into a legacy application
por supuesto que lo es. Se llama deuda técnica. Es por eso que antes de cualquier renovación importante, es preferible refactores pequeños y continuos. Reducir los principales defectos de diseño y pasar a IoC sería menos difícil.