Je suis maintenant confronté à l'intégration d'un conteneur d'inversion de contrôle (IoC) dans une application existante, et je cherche des recommandations sur la façon dont cela peut être réalisé le plus facilement dans le but ultime de réduire le couplage, augmentant ainsi la testabilité. Bien que je ne classifie généralement pas la plupart des classes comme des objets divins , chacune a trop de responsabilités et de dépendances cachées par le biais de la statique, des singletons et du manque d'interfaces.
Voici un aperçu de certains des défis qui doivent être relevés:
- L'injection de dépendance est rarement utilisée
- Les méthodes statiques abondent - à la fois comme méthodes d'usine et méthodes d'assistance
- Les singletons sont assez répandus
- Les interfaces, lorsqu'elles sont utilisées, ne sont pas trop granulaires
- Les objets récupèrent souvent des dépendances inutiles via les classes de base
Notre intention est que la prochaine fois que nous devons apporter des changements dans un domaine particulier, nous essayons de démêler les dépendances qui, en réalité, existent mais sont cachées derrière des globaux tels que les singletons et la statique.
Je suppose que cela rend le conteneur IoC secondaire à l'introduction de l'injection de dépendance, mais je m'attends à ce qu'il y ait un ensemble de pratiques et de recommandations qui pourraient être suivies ou envisagées qui nous aideront à briser ces dépendances.