Quelle est la bonne façon d'expliquer l' injection de dépendance ?
J'ai trouvé plusieurs tutoriels sur Google, mais aucun d'entre eux qui supposerait que le lecteur n'est qu'un débutant Java. Comment expliqueriez-vous cela à un novice?
Quelle est la bonne façon d'expliquer l' injection de dépendance ?
J'ai trouvé plusieurs tutoriels sur Google, mais aucun d'entre eux qui supposerait que le lecteur n'est qu'un débutant Java. Comment expliqueriez-vous cela à un novice?
Réponses:
Je vous donne une injection de dépendance pour les enfants de cinq ans.
la source
Et ça?
Si vous avez une classe
Employee
et que cet employé en a une,Address
vous pouvezEmployee
définir la classe comme suit:Jusqu'à présent, tout semble bien.
Ce code montre une relation HAS-A entre l'employé et son adresse, ça va.
Maintenant, cette relation HAS-A a créé une dépendance entre eux. Le problème vient du constructeur.
Chaque fois que vous souhaitez créer une
Employee
instance, vous avez besoin d'uneAddress
instance:Travailler de cette façon devient problématique, surtout lorsque vous souhaitez effectuer des tests unitaires.
Le problème principal survient lorsque vous devez tester un objet particulier, vous devez créer une instance d'un autre objet, et très probablement vous devez créer une instance d'un autre objet pour ce faire. La chaîne peut devenir ingérable.
Pour éviter cela, vous pouvez changer le constructeur comme ceci:
Utilisation d'un constructeur sans argument.
Ensuite, vous pouvez définir l'adresse quand vous le souhaitez:
Maintenant, cela peut être un glissement, si vous avez plusieurs attributs ou si les objets sont difficiles à créer.
Pourtant, pensez-y, disons, vous ajoutez l'
Department
attribut:Si vous avez 300 employés et que tous doivent avoir le même service, et en plus ce même service doit être partagé entre d'autres objets (comme la liste des départements de l'entreprise, ou les rôles de chaque département, etc.), alors vous avoir du mal avec la visibilité de l'
Department
objet et le partager à travers tout le réseau d'objets.En quoi consiste l' injection de dépendances pour vous aider à "injecter" ces dépendances dans votre code. La plupart des frameworks vous permettent de le faire en spécifiant dans un fichier externe, quel objet doit être injecté.
Supposons un fichier de propriétés pour un injecteur de dépendance fictif:
Vous définirez quoi injecter pour un scénario donné.
Ce que le framework Dependency Injector va faire est de définir les objets appropriés pour vous, de sorte que vous n'ayez pas à coder
setAddress
ousetDepartment
. Cela se ferait soit par réflexion, soit par génération de code ou par d'autres techniques.Ainsi, la prochaine fois que vous aurez besoin de tester la
Employee
classe, vous pourrez injecter de la maquetteAddress
et desDepartments
objets sans avoir à coder tout l'ensemble / obtenir pour tout votre test. Encore mieux, vous pouvez injecter du réelAddress
et desDepartment
objets dans le code de production, tout en ayant l'assurance que votre code fonctionne comme testé.C'est à peu près tout.
Pourtant, je ne pense pas que cette explication convient à un enfant de 5 ans comme vous l'avez demandé.
J'espère que vous le trouverez toujours utile.
la source
Lors de l'écriture d'une classe, il est naturel qu'elle utilise d'autres objets. Vous pouvez avoir une connexion à une base de données, par exemple, ou un autre service que vous utilisez. Ces autres objets (ou services) sont des dépendances. La façon la plus simple d'écrire le code est simplement de créer et d'utiliser ces autres objets. Mais cela signifie que votre objet a une relation inflexible avec ces dépendances: peu importe pourquoi vous invoquez votre objet, il utilise les mêmes dépendances.
Une technique plus puissante consiste à pouvoir créer votre objet et lui fournir les dépendances à utiliser. Vous pouvez donc créer une connexion à une base de données à utiliser, puis la remettre à votre objet. De cette façon, vous pouvez créer votre objet avec différentes dépendances à différents moments, ce qui rend votre objet plus flexible. Il s'agit de l'injection de dépendances, où vous "injectez" les dépendances dans l'objet.
BTW: Dans le style de présentation moderne qui utilise des photos flickr pour illustrer des concepts, cela pourrait être illustré par un toxicomane se tirant dessus avec de la drogue. Oh, attendez, c'est la dépendance à l'injection ... OK, désolé, mauvaise blague.
la source
Je ne connais aucun tutoriel simplifié, mais je peux vous donner une version de près de
25250 mots ou moins:Avec l'injection de dépendances, un objet ne configure pas ses propres composants en fonction de choses qu'il connaît déjà, plutôt que l'objet est configuré par une logique de niveau supérieur, puis il appelle des composants dont il n'avait pas de connaissance préalable intégrée. L'idée est de faire de l'objet davantage un composant et moins une application, en déplaçant les tâches de configuration à un niveau supérieur. Cela rend l'objet plus susceptible d'être utile à l'avenir ou avec une configuration différente.
C'est mieux pour les tests, c'est mieux quand vient le temps de réviser l'application. Une implémentation typique place la configuration en XML et utilise un cadre pour charger dynamiquement les classes.
la source
Lorsque vous recevez une nouvelle Nintendo, vous pouvez simplement utiliser les boutons et l'écran tactile pour jouer à des jeux.
Mais à l'usine Nintendo, ils doivent savoir comment en assembler un.
Lorsque les gens intelligents de l'usine sortiront une Nintendo DS, ce sera différent à l'intérieur, mais vous saurez toujours comment l'utiliser.
la source