Je suis relativement peu qualifié en injection de dépendance, et j'aimerais apprendre quelques bonnes pratiques et anti-modèles à utiliser et à éviter respectivement lors de l'utilisation de DI.
Réponses
Trop de publicités?J'ai vraiment apprécié cet article, au sujet de DI, comme il est ciblé vers les personnes qui n'ont pas une tonne de DI expérience, ou ne savez même pas ce que c'est.
Quelle est l'Unité?
It's a "dependency injection container".
Maintenant, à ce moment, un tas de gens la lecture de ce dire "Oui, nous le savons et nous sommes déjà à l'utiliser pour des raisons A, B, C ou nous avons choisi de ne pas l'utiliser pour des raisons X,Y,Z ", et j'imagine qu'un tas d'autres gens pourraient dire;
"Huh? What's a dependency injection container?"
Ce post est pour le dernier peuple – il n'est pas destinée à être exhaustive, mais j'espère que c'est pas complètement inutile soit :-)
À mon avis, le livre Dephanency Injection de Dhanji Prasanna est une lecture incontournable pour les concepteurs de logiciels, débutants et experts. Il traite directement vos questions DI.
Il y a une section des meilleures pratiques dans le guide de l' utilisateur de Guice.
J'ai constaté que lorsque je constate une violation de la loi de Demeter, c'est un indice que je pourrais vouloir une injection de dépendance.
Par exemple:
void doit()
{
i += object.anotherobject.addvalue; //violation of Law of Demeter
}
Indique parfois que je pourrais vouloir injecter une dépendance anotherobject
.
Ma règle de base sur l'utilisation de l'ai est que je vais injecter entre les couches, donc entre mon contrôleur et le dao serait un calque, afin que je puisse injecter, de sorte que si je veux de se moquer d'une couche je peux.
Je pense à l'aide de DI dans le même calque n'est pas une bonne idée, principalement en raison de la couche doit être étroitement associés, comme ils sont liés, sauf si vous avez un article de l'utilisateur qui le rend utile.
Par exemple, si votre DAO est peut-être sur des ordinateurs distincts, alors vous devriez être en mesure de prétendre qu'ils sont l'une couche, mais l'utilisation de DI réellement basculer entre le tout sur une seule machine et des machines séparées. Ensuite, le développeur peut tout faire sur une seule machine et il devrait fonctionner sur des machines distinctes.
Mais, sauf s'il existe un besoin pressant, je pense que DI dans le même calque est une complication inutile.