61 votes

Quelle est la réelle différence entre le "Bâtard d'Injection" et "Pauvre Homme d'Injection"

De la "Injection de Dépendance dans la .Net livre" je sais que l'objet graphique doit être créé à la Composition de la Racine de l'application qui fait beaucoup de sens pour moi lorsque vous utilisez un conteneur IoC.

Dans toutes les applications que j'ai vu lors d'une tentative d'utilisation de la DI est fait, il y a toujours deux constructeurs: l'un avec les dépendances entre les paramètres et le "par défaut" un avec aucun des paramètres qui appelle à son tour l'autre "newing" toutes les dépendances, mais, dans le livre de ce qui est appelé le "Bâtard d'Injection d'anti-modèle" et c'est ce que j'ai connu en tant que "Pauvre Homme d'Injection".

Maintenant, compte tenu de tout ceci, je dirais alors que le "Pauvre Homme d'Injection" serait tout simplement pas à l'aide d'un conteneur IoC et au lieu de codage toutes l'objet graphique à la main sur ladite Composition de la Racine.

Donc mes questions sont:

  1. Suis-je la compréhension de ces concepts correctement ou suis-je complètement à côté de la piste?
  2. Si vous devez enregistrer toutes les dépendances dans le conteneur IoC contre les coder à la main dans exactement la même Composition de la Racine, ce qui est le réel avantage de l'utilisation d'un conteneur IoC?
  3. Si j'ai mal compris ce "Pauvre Homme d'Injection" est vraiment, quelqu'un pourrait-il préciser qu'il?

Merci

58voto

Mark Seemann Points 102767

Quand il s'agit de DI, il y a beaucoup de conflit d'usage de la terminologie de là-bas. Le terme Pauvre Homme DI n'est pas une exception. Pour certaines personnes, cela signifie une chose et à d'autres, elle signifie quelque chose de différent.

L'une des choses que je voulais faire avec le livre était de fournir un uniforme modèle de langue pour les DI. Quand il est venu à l'ensemble de ces termes de conflit d'usage, j'avais deux options: Venir avec un tout nouveau terme, ou de choisir le plus répandu (selon mon jugement subjectif).

En général, j'ai préféré re-utiliser la terminologie existante plutôt que de créer un tout nouveau (et donc étranger) modèle de langue. Cela signifie que dans certains cas (comme la Pauvre DI), vous pouvez avoir une notion différente de ce que le nom est de la définition donnée dans le livre. C'est souvent le cas avec les modèles des livres.

Au moins, je trouve ça rassurant de voir que le livre semble avoir fait son travail d'expliquer exactement la fois Pauvre Homme DI et le Bâtard d'Injection, parce que l'interprétation donnée dans l'O. P. est sur place.

Concernant l'avantage réel d'un Conteneur d'injection de dépendances je vous renvoie à cette réponse: Arguments contre l'Inversion de Contrôle des conteneurs

4voto

JotaBe Points 8950

Quelques notes pour la partie 2) de la question.

Si vous devez enregistrer toutes les dépendances dans le conteneur IoC contre les coder à la main dans exactement la même Composition de la Racine, ce qui est le réel avantage de l'utilisation d'un conteneur IoC?

  • Si vous avez un arbre de dépendances (clasess qui dépendent de dépendances qui dépendent d'autres dépendances et ainsi de suite): vous ne pouvez pas faire toutes les "news" dans une composition de la racine, parce que vous avez de nouveaux cas chaque "bâtard injection" constructeur de chaque classe, il y a beaucoup de "composition racines" diffusée le long de votre base de code

  • Si vous avez un arbre de dépendances, ou non, à l'aide d'un conteneur IoC sera de rechange de taper du code. Imaginez que vous avez 20 classes différentes qui dépendent de la même IDependency. Si vous utilisez un conteneur, vous pouvez fournir une configuration à savoir l'instance à utiliser pour l' IDependency. Vous pourrez faire cela en un seul endroit, et le conteneur va prendre soin de fournir à l'instance dans toutes les classes dépendantes

  • Le récipient peut également contrôler la durée de vie des objets, ce qui offre un autre avantage.

Tout cela, à part des autres avantages manifestes fournis par DI (testabilité, la maintenabilité du code decouplig, extensibilité...)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X