J'ai cherché à utiliser le framework Typhoon pour l'injection de dépendances cette semaine. J'ai l'impression que séparer la construction d'objets est bénéfique pour remplacer des composants arbitraires par des simulateurs lors des tests unitaires, et jusqu'à présent, j'ai vu des avantages de cela seul.
Mais je ne peux pas m'empêcher de penser que là où avant j'avais une classe de contrôleur de vue énorme qui avait des dizaines d'importations d'en-tête, j'ai maintenant une classe d'usine énorme qui a des dizaines d'importations d'en-tête. Suis-je censé éviter d'avoir une classe d'usine massive?
dependency-injection
Victor
la source
la source
Réponses:
L'injection de dépendances aide simplement à définir comment un objet connaît un autre objet dépendant. Cela ne vous aidera pas à réduire la complexité globale du système. Si vous avez eu besoin de dizaines d'importations avant DI, vous aurez toujours besoin de dizaines d'importations après. La différence est que ces importations se feront dans un emplacement (classe) plus logique (usine, constructeur, etc.).
En permettant aux dépendances d'être fournies via un constructeur ou une méthode, vous vous donnez la flexibilité de fournir un objet dépendant différent, mais toujours valide, à votre classe et augmentez la cohésion de cette classe en supprimant les problèmes.
Il existe plusieurs principes similaires et souvent utilisés ensemble: l'injection de dépendance (DI), l'inversion de contrôle (IoC) et le principe d'inversion de dépendance (DIP)
De cet article http://martinfowler.com/articles/dipInTheWild.html
la source
L'injection de dépendance ne réduit pas la complexité, mais elle augmente la maniabilité par la séparation des préoccupations et le couplage réduit.
Vous êtes censé éviter les cours "énormes", point final. Supposons donc que vous divisiez le contrôleur de vue en classes plus petites et plus faciles à gérer. Désormais, tous sont responsables de s'emparer de leurs dépendances. DI vous aide à déplacer cette gestion de la dépendance de toutes ces classes dans une classe usine / configuration qui est seule responsable de la gestion de la dépendance - voir responsabilité unique principe. Et bien qu'il soit certainement beaucoup moins "gigantesque" que le contrôleur de vue d'origine, s'il devient trop grand, vous avez toujours la possibilité de le diviser en classes de gestion des dépendances plus petites qui sont responsables des différentes parties de l'application.
la source
Dans les mots du profane:
L'injection de dépendance déplace la complexité là où elle nuit le moins.
EDIT pour @gnat: DI ne fait pas que déplacer la complexité vers une classe distincte, elle la déplace là où elle cause le moins de dommages.
la source