Eu tenho uma grande base de código com muitos singletons "antipadrão", classes de utilitário com métodos estáticos e classes criando suas próprias dependências usando a new
palavra-chave. Torna um código muito difícil de testar.
Eu quero migrar gradualmente o código para o contêiner de injeção de dependência (no meu caso Guice
, porque é um GWT
projeto). Pelo meu entendimento da injeção de dependência, é tudo ou nada. Todas as classes são gerenciadas pelo Spring / Guice ou nenhuma. Como a base de código é grande, não consigo transformar o código durante a noite. Então, eu preciso de uma maneira de fazer isso gradualmente.
O problema é que, quando começo com uma classe que precisa ser injetada em outras classes, não posso usar um simples @Inject
nessas classes, porque essas classes ainda não são gerenciadas por contêiner. Portanto, isso cria uma cadeia longa até as classes "principais" que não são injetadas em lugar algum.
A única maneira que vejo é disponibilizar Injector
globalmente um contexto / aplicativo por meio de um singleton, para que outras classes possam obter um beans gerenciados a partir dele. Mas isso contradiz a ideia importante de não revelar composition root
a aplicação.
Outra abordagem seria de baixo para cima: para começar com as classes "de alto nível", inclua-as no contêiner de injeção de dependência e vá lentamente para as classes "menores". Mas então tenho que esperar muito tempo, pois posso testar as classes menores que ainda dependem de globais / estáticas.
Qual seria o caminho para alcançar uma migração tão gradual?
PS A pergunta As abordagens graduais para injeção de dependência são semelhantes no título, mas não respondem à minha pergunta.