Parler d'injection de dépendance
Dans la programmation orientée objet, le problème que nous traitons souvent est le découplage. Plus le couplage du programme indique la lisibilité et la maintenabilité du programme. L'inversion du contrôle (inversion du contrôle ou du CIO) est un principe de conception couramment utilisé de la programmation orientée objet. En utilisant ce principe, nous pouvons réduire le couplage. Parmi eux, l'injection de dépendance est la mise en œuvre la plus couramment utilisée de l'inversion de contrôle.
Qu'est-ce que la dépendance
La dépendance est un phénomène commun dans les programmes. Par exemple, l'énergie d'instance de la classe Gasenergy est utilisée dans la voiture de classe. La pratique habituelle consiste à créer explicitement une instance de la classe Gasenergy dans la classe de voiture et à l'attribuer à l'énergie. Comme indiqué dans le code suivant
Interface Energy {} class Gasenergy implémente l'énergie {} classe CARD {énergie énergétique = new Gasenergy ();}Il y a des problèmes
Les voitures de classe assument des responsabilités inutiles et sont responsables de la création d'objets énergétiques, qui a inévitablement un couplage grave. Pour donner un exemple réaliste, il est de la responsabilité de la voiture d'utiliser l'énergie qu'une voiture utilise non pas de la voiture, mais du constructeur automobile.
Évolutivité. En supposant que nous voulons modifier l'énergie à l'énergie électrique, nous devons alors modifier la classe de voiture, qui ne respecte évidemment pas le principe de la fermeture ouverte.
Pas propice aux tests unitaires.
Injection de dépendance
L'injection de dépendance est un tel comportement. Dans la voiture de classe, l'objet Gasenergy n'est pas activement créé, mais la dépendance est définie en la transmettant sous la forme de l'objet Gasenergy en externe. Il existe trois méthodes courantes d'injection de dépendance.
Injection de constructeur
Passez la dépendance requise comme paramètres du constructeur pour compléter l'injection de dépendance.
Class Car {Energy Menergy; voiture publique (énergie énergétique) {Menergy = énergie; }}Injection de méthode du secteur
Ajoutez la méthode du secteur, le paramètre est la dépendance qui doit être injectée et l'injection de dépendance peut être terminée.
Class Car {Energy Menergy; public void SetEnergy (énergie énergétique) {Menergy = énergie; }}Injection d'interface
L'injection d'interface est évidente, c'est pour créer un ensemble d'interfaces pour l'injection de dépendance, et la dépendance est transmise sous forme de paramètres, et l'injection de dépendance à l'implémentation spécifique est terminée en appelant une interface unifiée.
Interface EnergyConsumerInterface {public void SetEnergy (énergie énergétique);} La voiture de classe implémente EnergyConsumeRerInterface {Energy Menergy; public void SetEnergy (énergie énergétique) {Menergy = énergie; }}L'injection d'interface est similaire à l'injection de la méthode du secteur, la différence est que l'injection d'interface utilise une méthode unifiée pour terminer l'injection, tandis que le nom de la méthode de l'injection de méthode du secteur est relativement décontracté.
Compromis de cadre
Il existe de nombreux cadres pour l'injection de dépendance, le plus célèbre est Guice. Bien sûr, le printemps soutient également l'injection de dépendance. Guice utilise des annotations de lecture d'exécution, génère des dépendances et les injecte par la réflexion. Ce formulaire n'est pas très adapté aux appareils mobiles Android. Après tout, ces opérations sont traitées au moment de l'exécution et ont des exigences de performance élevées.
Dagger est une bibliothèque d'injection de dépendance appropriée pour le développement d'Android. Il utilise également la forme d'annotations de classe. La différence est qu'il génère des classes auxiliaires au moment de la compilation et attend que les classes auxiliaires générées soient utilisées pour compléter l'injection de dépendance au moment de l'exécution.
Utiliser ou non
En fait, s'il faut utiliser ou non l'utilisation du cadre est un problème. Si vous utilisez le cadre, tout le monde dans l'équipe doit suivre les instructions pour écrire du code pour résoudre l'injection de dépendance. Ces cadres ne sont pas faciles à démarrer et les coefficients d'apprentissage sont relativement complexes et difficiles à maîtriser, ce qui est également un problème qui doit être pris en compte.
Mon opinion personnelle est que nous ne recommandons ni ne nous opposons à l'utilisation de ces cadres, mais je pense que parfois nous espérons un cadre, il vaut donc mieux prêter attention à ces problèmes dans notre vie quotidienne. L'évitement artificiel n'est-il pas également une exigence de base pour nous-mêmes?
Recherche de dépendance
La recherche de dépendances est la mise en œuvre spécifique du principe d'inversion de contrôle, contrairement à l'acceptation passive de l'injection de dépendance, la recherche de dépendance est une demande active. En cas de besoin, l'objet est obtenu en appelant les méthodes fournies par le cadre. Lors de l'obtention, des chemins de file de configuration pertinents, des clés et d'autres informations sont nécessaires pour déterminer l'état de l'objet obtenu.
Ce qui précède est une introduction détaillée aux informations sur l'injection de dépendance. Nous continuerons d'ajouter des informations pertinentes à l'avenir. Merci pour votre soutien à ce site!