Je prévois de faire un exposé sur l’injection de dépendance et les conteneurs IoC, et j’espère trouver de bons arguments pour l’utiliser.
Quels sont les principaux avantages de l’utilisation de cette technique et de ces outils?
Je prévois de faire un exposé sur l’injection de dépendance et les conteneurs IoC, et j’espère trouver de bons arguments pour l’utiliser.
Quels sont les principaux avantages de l’utilisation de cette technique et de ces outils?
Réponses:
Le plus important pour moi est de faciliter le respect du principe de responsabilité unique .
DI / IoC simplifie la gestion des dépendances entre les objets. En retour, cela me facilite la tâche de casser une fonctionnalité cohérente dans son propre contrat (interface). En conséquence, mon code a été beaucoup plus modularisé depuis que j'ai découvert DI / IoC.
Un autre résultat est que je peux beaucoup plus facilement me rendre à une conception qui prend en charge le principe d'ouverture / fermeture . C'est l'une des techniques les plus inspirantes de confiance (juste après les tests automatisés). Je doute que je puisse épouser suffisamment les vertus du principe ouvert-fermé.
DI / IoC est l’un des rares éléments de ma carrière de programmeur à avoir «changé la donne». Il y a un énorme écart de qualité entre le code que j'ai écrit avant et après l'apprentissage de DI / IoC. Permettez-moi de souligner cela un peu plus. Amélioration énorme de la qualité du code.
Les exemples qui m'ont réellement ouvert les yeux ont montré comment il était possible de tester facilement les objets créés de cette manière. Avant cela, j'avais de la difficulté à isoler des objets pour un test unitaire. J'écrivais souvent des tests pour interagir avec un système beaucoup plus grand. C'était vraiment difficile parce que le système dans son ensemble était beaucoup moins prévisible et beaucoup plus susceptible de changer que les composants individuels.
Les avantages des injections de dépendance sont les suivants:
Je pense que les avantages réels sont plus politiques que techniques. DI est simplement une alternative au modèle Service Locator , rien de plus. En soi, cela ne facilite pas le respect de principes tels que SRP ou OCP, ni le découplage des couches. D'autres personnes interrogées ici confondent différents concepts et techniques, IMO.
Vous pouvez atteindre les mêmes objectifs en matière de cohésion élevée et de couplage faible en utilisant des localisateurs de services ou en instanciant simplement des dépendances directement, le cas échéant (ce qui est le plus souvent le cas).
Maintenant, je sais que beaucoup seront en désaccord avec cette opinion. Je serai heureux de discuter des exemples concrets.
Lorsque DI est utilisé pour exposer des objets internes à des fins de test, le motif a été utilisé de manière abusive.