Au cours de la dernière année, j'ai créé un nouveau système utilisant l'injection de dépendance et un conteneur IOC. Cela m'a beaucoup appris sur DI!
Cependant, même après avoir appris les concepts et les modèles appropriés, je considère qu'il est difficile de découpler le code et d'introduire un conteneur IOC dans une application héritée. L'application est suffisamment grande au point qu'une véritable mise en œuvre serait écrasante. Même si la valeur était comprise et le temps accordé. Qui a le temps de faire quelque chose comme ça ??
Le but est bien sûr d'amener les tests unitaires à la logique métier!
Logique métier étroitement liée aux appels de base de données empêchant les tests.
J'ai lu les articles et je comprends les dangers de l'injection de dépendance du pauvre comme décrit dans cet article de Los Techies . Je comprends que cela ne dissocie vraiment rien.
Je comprends que cela peut impliquer une refactorisation à l'échelle du système car les implémentations nécessitent de nouvelles dépendances. Je n'envisagerais pas de l'utiliser sur un nouveau projet avec une certaine taille.
Question: Est-il correct d'utiliser l'ID de Poor Man pour introduire la testabilité dans une application héritée et démarrer le roulement?
De plus, l'utilisation de l'ID du pauvre comme approche populaire de l'injection de dépendance véritable est-elle un moyen précieux d'éduquer sur le besoin et les avantages du principe?
Pouvez-vous refactoriser une méthode qui a une dépendance d'appel de base de données et abstraire cet appel derrière une interface? Le simple fait d'avoir cette abstraction rendrait cette méthode testable car une implémentation simulée pourrait être transmise via une surcharge du constructeur.
Sur la route, une fois que l'effort aura gagné des partisans, le projet pourrait être mis à jour pour mettre en œuvre un conteneur du CIO et les constructeurs seraient là-bas pour prendre les abstractions.
I consider it a challenge to decouple code and introduce an IOC container into a legacy application
bien sûr que c'est. C'est ce qu'on appelle la dette technique. C'est pourquoi avant toute refonte majeure, il est préférable de refactoriser les petits et continus. Réduire les principaux défauts de conception et passer à l'IoC serait moins difficile.