web-dev-qa-db-fra.com

Quels sont les avantages de l'injection de dépendances et des conteneurs IoC?

Je prévois de faire un exposé sur l'injection de dépendances et les conteneurs IoC, et je cherche de bons arguments pour l'utiliser.

Quels sont les avantages les plus importants de l'utilisation de cette technique et de ces outils?

67
Andy Lowry

Le plus important, pour moi, est de faciliter le respect du principe de responsabilité unique .

DI/IoC me facilite la gestion des dépendances entre les objets. À mon tour, cela me permet de séparer plus facilement des fonctionnalités cohérentes en son propre contrat (interface). En conséquence, mon code a été beaucoup plus modularisé depuis que j'ai appris la DI/IoC.

Un autre résultat de cela est que je peux beaucoup plus facilement voir mon chemin vers une conception qui prend en charge le Open-Closed Principle . C'est l'une des techniques les plus inspirantes pour la confiance (juste après les tests automatisés). Je doute que je puisse suffisamment épouser les vertus du principe ouvert-fermé.

DI/IoC est l'une des rares choses dans ma carrière de programmeur qui a 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 le souligner davantage. [~ # ~] énorme [~ # ~] amélioration de la qualité du code.

48
quentin-starin

Les exemples qui m'ont vraiment ouvert les yeux étaient de voir comment cela permettait de tester facilement les objets créés de cette manière. Avant cela, j'ai eu du mal à essayer d'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 car le système dans son ensemble était beaucoup moins prévisible et beaucoup plus susceptible de changer que les composants individuels.

9
Winston Ewert

Les avantages des injections de dépendance sont:

  1. Votre code est propre et plus lisible.
  2. Les codes sont faiblement couplés.
  3. Plus réutilisable car les implémentations sont configurées dans le fichier XML, il peut être utilisé dans un contexte différent.
  4. Le code peut être facilement testé avec différentes implémentations simulées.
4
Solaimani SA

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 répondants confondent différents concepts et techniques, l'OMI.

Vous pouvez atteindre les mêmes objectifs en ce qui concerne la forte cohésion et le faible couplage en utilisant les localisateurs de service, ou en instanciant simplement les dépendances directement chaque fois que cela est applicable (ce qui est la plupart du temps).

Maintenant, je sais que beaucoup seront en désaccord avec cette opinion. Je serai heureux de discuter d'exemples concrets.

2
Rogério