J'ai une grande base de code avec beaucoup de singletons "anti-pattern", des classes utilitaires avec des méthodes statiques et des classes créant leurs propres dépendances à l'aide de new
mots-clés. Cela rend un code très difficile à tester.
Je veux migrer progressivement le code vers le conteneur d'injection de dépendance (dans mon cas, c'est Guice
parce que c'est un GWT
projet). D'après ma compréhension de l'injection de dépendance, c'est tout ou rien. Soit toutes les classes sont gérées par Spring / Guice, soit aucune. Étant donné que la base de code est grande, je ne peux pas transformer le code pendant la nuit. J'ai donc besoin d'un moyen de le faire progressivement.
Le problème est que lorsque je commence avec une classe qui doit être injectée dans d'autres classes, je ne peux pas utiliser de simple @Inject
dans ces classes, car ces classes ne sont pas encore gérées par conteneur. Cela crée donc une longue chaîne jusqu'aux classes "supérieures" qui ne sont injectées nulle part.
La seule façon que je vois est de rendre un Injector
contexte / application globalement disponible via un singleton pour le moment, afin que d'autres classes puissent en obtenir un beans gérés. Mais cela contredit l'idée importante de ne pas révéler le composition root
à l'application.
Une autre approche serait ascendante: pour commencer avec des classes "de haut niveau", incluez-les dans le conteneur d'injection de dépendance et descendez lentement vers des classes "plus petites". Mais alors je dois attendre longtemps, car je peux tester ces classes plus petites qui dépendent toujours des globaux / statiques.
Quelle serait la voie à suivre pour réaliser une telle migration progressive?
PS La question Approches progressives de l'injection de dépendance est similaire dans son titre, mais elle ne répond pas à ma question.