Une introduction rapide à l'injection de dépendances: qu'est-ce que c'est et quand l'utiliser

introduction

En génie logiciel, l' injection de dépendances est une technique par laquelle un objet (ou une méthode statique) fournit les dépendances d'un autre objet. Une dépendance est un objet qui peut être utilisé (un service).

C'est la définition de Wikipédia mais quand même, mais ce n'est pas particulièrement facile à comprendre. Alors comprenons mieux.

Avant de comprendre ce que cela signifie en programmation, voyons d'abord ce que cela signifie en général car cela nous aidera à mieux comprendre le concept.

Dépendance ou dépendant signifie s'appuyer sur quelque chose pour le soutien. Comme si je disais que nous dépendons trop des téléphones portables, cela signifie que nous en dépendons.

Donc, avant de passer aux injections de dépendances , comprenons d'abord ce que signifie une dépendance en programmation.

Lorsque la classe A utilise certaines fonctionnalités de la classe B, il est dit que la classe A a une dépendance de la classe B.

En Java, avant de pouvoir utiliser des méthodes d'autres classes, nous devons d'abord créer l'objet de cette classe (c'est-à-dire que la classe A doit créer une instance de la classe B).

Ainsi, transférer la tâche de création de l'objet à quelqu'un d'autre et utiliser directement la dépendance est appelé injection de dépendance.

Pourquoi devrais-je utiliser l'injection de dépendances?

Disons que nous avons une classe de voiture qui contient divers objets tels que des roues, un moteur, etc.

Ici, la classe car est responsable de la création de tous les objets de dépendance. Maintenant, que se passe-t-il si nous décidons d'abandonner MRFWheels à l'avenir et que nous voulons utiliser Yokohama Wheels?

Nous devrons recréer l'objet voiture avec une nouvelle dépendance Yokohama. Mais lors de l'utilisation de l'injection de dépendances (DI), nous pouvons changer les roues au moment de l'exécution (car les dépendances peuvent être injectées au moment de l'exécution plutôt qu'au moment de la compilation).

Vous pouvez considérer DI comme l'intermédiaire dans notre code qui fait tout le travail de création de l'objet de roues préféré et de le fournir à la classe Car.

Cela rend notre classe Car indépendante de la création des objets Roues, Batterie, etc.

Il existe essentiellement trois types d'injection de dépendances:

  1. injection de constructeur: les dépendances sont fournies via un constructeur de classe.
  2. injection setter: le client expose une méthode setter que l'injecteur utilise pour injecter la dépendance.
  3. injection d'interface: la dépendance fournit une méthode d'injection qui injectera la dépendance dans tout client qui lui est passé. Les clients doivent implémenter une interface qui expose une méthode de définition qui accepte la dépendance.

Alors maintenant, c'est la responsabilité de l'injection de dépendance de:

  1. Créer les objets
  2. Savoir quelles classes nécessitent ces objets
  3. Et leur fournir tous ces objets

S'il y a un changement dans les objets, alors DI l'examine et cela ne devrait pas concerner la classe utilisant ces objets. De cette façon, si les objets changent à l'avenir, alors la responsabilité de son DI de fournir les objets appropriés à la classe.

Inversion de contrôle - le concept derrière DI

Cela indique qu'une classe ne doit pas configurer ses dépendances de manière statique mais doit être configurée par une autre classe de l'extérieur.

C'est le cinquième principe de SOLID - lecinq principes de base de la programmation et de la conception orientées objet par Uncle Bob - qui stipule qu'une classe doit dépendre de l'abstraction et non de concrétions (en termes simples, codés en dur).

Selon les principes, une classe doit se concentrer sur l'accomplissement de ses responsabilités et non sur la création d'objets dont elle a besoin pour s'acquitter de ces responsabilités. Et c'est là que l' injection de dépendances entre en jeu: elle fournit à la classe les objets nécessaires.

Remarque: si vous souhaitez en savoir plus sur les principes SOLID d'oncle Bob, vous pouvez vous rendre sur ce lien.

Avantages de l'utilisation de DI

  1. Aide aux tests unitaires.
  2. Le code de la plaque de chaudière est réduit, car l'initialisation des dépendances est effectuée par le composant injecteur.
  3. L'extension de l'application devient plus facile.
  4. Aide à permettre un couplage lâche, ce qui est important dans la programmation d'application.

Inconvénients de la DI

  1. C'est un peu complexe à apprendre et, s'il est surutilisé, cela peut entraîner des problèmes de gestion et d'autres problèmes.
  2. De nombreuses erreurs de compilation sont transmises au moment de l'exécution.
  3. Les frameworks d'injection de dépendances sont implémentés avec réflexion ou programmation dynamique. Cela peut gêner l'utilisation de l'automatisation IDE, comme «rechercher des références», «afficher la hiérarchie des appels» et la refactorisation sécurisée.

Vous pouvez implémenter l'injection de dépendances par vous-même (Pure Vanilla) ou utiliser des bibliothèques ou des frameworks tiers.

Bibliothèques et frameworks qui implémentent DI

  • Printemps (Java)
  • Google Guice (Java)
  • Dague (Java et Android)
  • Château de Windsor (.NET)
  • Unité (.NET)

Pour en savoir plus sur l'injection de dépendances, vous pouvez consulter les ressources ci-dessous:

Injection de dépendances Java - Tutoriel d'exemple de modèle de conception DI - JournalDev

Utilisation de l'injection de dépendances en Java - Introduction - Tutoriel - Vogella

Inversion des conteneurs de contrôle et modèle d'injection de dépendances - Martin Fowler

J'espère que cela aide!

Si vous avez aimé l'article et que vous voulez lire d'autres articles incroyables, suivez-moi ici (Bhavya Karia) et montrez votre soutien car cela me motive à écrire plus.

Si vous avez des questions ou des commentaires pour moi, connectez-vous sur LinkedIn, Twitter, Facebook.

Modifier 1:

Grâce à Sergey Ufocoder, cet article a été converti en russe. Mes amis russes, qui savent tous lire la langue russe, la lisent.

Lien vers l'article

De plus, si vous souhaitez appliquer DI en JavaScript et recherchez une bibliothèque, Jo Surikat vous suggère d'essayer sa bibliothèque.

Di-Ninja

Une autre bibliothèque DI impressionnante en JavaScript a été suggérée par Nicolas Froidure.

couteau

Modifier 2:

Si vous êtes un développeur PHP, ne vous inquiétez pas, vous êtes également couvert. Gordon Forsythe a recommandé cette bibliothèque incroyable que vous voudrez peut-être tous essayer.

auryn

Merci pour tous les gentils mots que j'ai reçus. Partagez l'article pour que de plus en plus de personnes puissent en bénéficier.

Si vous avez appris ne serait-ce qu'une chose ou deux, partagez cette histoire!