En règle générale, mes dépendances sont résumées aux interfaces, mais je n'utiliserai qu'une seule implémentation concrète lors de l'utilisation sans test. Par exemple, j'étais pour écrire un Maintenant, les puristes ont tendance à haleter en horreur, car j'ai instancié une classe de béton dans le constructeur sans paramètre. J'ai eu, dans le passé, haussa cela, parce que je sais que la seule fois où je n'utiliserai pas la classe de béton, c'est quand je suis des tests unitaires et des dépendances moqueurs. P> alors qu'il coule le donc la question est la suivante: qu'est donc la question risque ici? Qu'est-ce que je perds avec ce type de motif qui vaut la peine d'ajouter un conteneur de COI? P> p> fooservice code>: Fooservice code> classe dans la catégorie code> BardePendance code>, ce n'est pas un couplage em> étanche; Ces classes et interfaces existent également dans la même assemblée. Il ne me semble donc pas que je perds beaucoup d'ici, ou de me peindre dans un coin. Je peux toujours tester facilement la classe fooservice code> sans obtenir de code ingérable, simplement en utilisant le constructeur qui me permet de passer des interfaces moquées. P>
3 Réponses :
Gestion à vie, par exemple. Peut-être que vous utilisez Vous devez également trouver tous les usages de Un conteneur corrige les deux problèmes pour vous, car vous configurez ensuite l'instanciation et la vie de cycle de vie d'objets dans une méthode, à savoir où vous configurez votre conteneur. p> BARDPENDENCE CODE> Tout au long de votre code et que vous souhaitez que une instance soit en vie. Vous ne pouvez pas faire cela si chaque utilisateur crée ses propres instances. P>
Nouvelle BardePendance () Code> Si vous souhaitez le remplacer par Nouveau NewbardePendance () Code>. P>
Vous suggérez donc que le conteneur de COI est mieux adapté à l'injection de modèle singleton? Ça a du sens.
Oui, vous pouvez utiliser une durée de vie "une fois par AppDomain", de sorte que vous n'avez pas besoin de singletons ou de classes statiques.
Ce que vous perdez sans injection de dépendance est la capacité de centraliser tous les aspects de la gestion des dépendances. Visualisant le graphique de dépendance et la gestion desecycles de vos objets est plus facile lorsque vous disposez de toutes les informations au même endroit, au lieu de dispersées sur tout le code. P>
Un exemple concret serait si vous souhaitiez remplacer la mise en œuvre par défaut de ibardependency code> utilisé dans certains, mais pas toutes les classes. Raisonnement sur lequel remplacer est beaucoup plus facile si les dépendances sont toutes câblées dans le même fichier ou dans le même groupe de fichiers. P>
Cela dépend, mais si le point de fooservice doit être accédé par un autre développeur, la dépendance à la bardespendance sera fondamentalement cachée. À mon avis, non seulement la moqueur et les tests sont la raison de l'utilisation d'une injection de dépendance, mais également d'une indication claire, ce qui est utilisé par Certaing Classes et ce dont ils sont nécessaires pour fonctionner correctement. Et peut-être que je suis beaucoup puriste, mais lorsque ce modèle est correct, il est facile d'aller plus loin et de finir avec un code totalement étroitement couplé et maintien. P>
J'utilise la même approche dans les petits projets. DI et d'autres règles «faire du droit» font généralement de petits projets trop complexes. Bien sûr, cela apporte beaucoup d'avantages, mais cela ne vaut pas toujours le problème.