Tengo una gran base de código con muchos singletons "antipatrón", clases de utilidad con métodos estáticos y clases que crean sus propias dependencias usando new
palabras clave. Hace que un código sea muy difícil de probar.
Quiero migrar gradualmente el código al contenedor de inyección de dependencia (en mi caso Guice
, porque es un GWT
proyecto). Desde mi entendimiento de la inyección de dependencia, es todo o nada. O bien Spring / Guice maneja todas las clases o ninguna. Como la base de código es grande, no puedo transformar el código durante la noche. Entonces necesito una forma de hacerlo gradualmente.
El problema es que cuando comienzo con una clase que necesita ser inyectada en otras clases, no puedo usar un simple @Inject
en esas clases, porque esas clases aún no están administradas por el contenedor. Por lo tanto, esto crea una larga cadena hasta las clases "superiores" que no se inyectan en ninguna parte.
La única forma en que veo es hacer que un Injector
contexto / application esté disponible globalmente a través de un singleton por el momento, para que otras clases puedan obtener un bean administrado de él. Pero contradice la idea importante de no revelar composition root
la aplicación.
Otro enfoque sería de abajo hacia arriba: para comenzar con clases de "alto nivel", inclúyalas en el contenedor de inyección de dependencia y baje lentamente a clases "más pequeñas". Pero luego tengo que esperar mucho tiempo, ya que puedo probar esas clases más pequeñas que aún dependen de las variables globales / estáticas.
¿Cuál sería la forma de lograr una migración tan gradual?
PD La pregunta Acercamientos graduales a la inyección de dependencia es similar en el título, pero no responde a mi pregunta.