Pourquoi le schéma d'injection de dépendance n'a-t-il pas été inclus dans la bande de quatre ? GOF a-t-il précédé les tests automatisés généralisés? L'injection de dépendance est-elle maintenant considérée comme un schéma central?
design-patterns
Tom Squires
la source
la source
Réponses:
J'étais rédacteur en chef du magazine Software Development lorsque le livre Gang of Four est paru et je peux dire en toute confiance que les tests unitaires n'étaient pas une pratique répandue en 1994, lorsque Design Patterns a été publié à l'origine.
En 1994, C ++ était le langage orienté objet le plus couramment utilisé et la plupart des personnes le programmant provenaient d'un arrière-plan C. L’une des choses que les gens n’avaient tout simplement pas à faire est de penser à des centaines, voire des milliers de points d’entrée dans votre programme. Vous avez pensé à la
main()
. Si vous avez travaillé sur un grand projet, vous pourriez avoir un fichier makefile (généralement très élaboré) pour créer un programme basé sur des modules. Mais "tests unitaires"? Vous démarrez un processus, créez le contexte de mémoire nécessaire, exécutez-le et supprimez-le, méthode par méthode ? C'était très radical.Java a rendu plus évidente la programmation de points d’entrée multiples. Au moment du boom initial de Dot-Com, les tests unitaires étaient une technique bien connue, mais c’est vraiment JUnit (vers 2001?) Qui l’a incendiée et est devenue une pratique universelle.
Bien que la stratégie et le concept général de programmation pour une interface fassent partie du GoF et du zeitgeist du milieu des années 90, l’idée de l’ injection est venue assez tard au parti (vers 2003-2005?). Honnêtement, mes cheveux gris sont encore assez douteux à propos de cet aspect de la DI ("Enlève-moi de ma pelouse, ma fichue configuration!").
la source
Ils l'appelaient stratégie .
Leur stratégie semble avoir toutes les caractéristiques de l'injection de dépendance sans le nom à consonance complexe.
la source
Je pense que l'injection de dépendance est plus pertinente pour séparer la mise en œuvre en niveaux. Un autre domaine où nous pensons à l'injection de dépendance est le test unitaire. Et votre suggestion antérieure à la date semble être correcte. Si le gang devait collecter et séparer les schémas en 2012, l'injection de dépendance serait définitivement là.
Une stratégie pourrait être abordée lors des discussions mais cette stratégie ne parle pas d'injection de dépendance. Mais lorsque vous utilisez un modèle de stratégie dans un seul projet ou dans une dll (toutes les classes et interfaces restent dans un projet), il semble que nous procédions à une injection de dépendance. En fait nous ne sommes pas.
Maintenant, si les classes et les interfaces mentionnées dans le modèle de stratégie sont séparées dans différents projets ou niveaux, WE devra alors utiliser des techniques d'injection de dépendance. Nous pourrions utiliser des fichiers de configuration unitaires (aucun changement d’exécution possible cependant). Mais le modèle de stratégie ne dit pas comment injecter une dépendance.
S'il existe un modèle qui ressemble de près à l'injection de dépendance, il s'agit du modèle de méthode abstraite d'usine. Ce modèle pourrait être utilisé dans un modèle de stratégie pour injecter une dépendance.
la source
la réponse Stratégie est correcte à 100%. J'ai voté mais peux commenter.
"Strategy permet à l'algorithme de varier indépendamment des clients qui l'utilisent. [1] La stratégie est l'un des modèles inclus dans le livre influent Design Patterns de Gamma et al. Qui a popularisé le concept d'utilisation de modèles pour décrire la conception de logiciels."
Un motif de conception ne dépend pas de son utilisation. L'injection de dépendance est mise en œuvre à l'aide du modèle de stratégie. Si nous nommions chaque modèle en fonction du cas d'utilisation, nous devions renommer beaucoup de modèles.
Le modèle de référentiel n'est pas un nouveau modèle, c'est le modèle de modèle.
"Dans la méthode de modèle de ce modèle de conception, une ou plusieurs étapes de l'algorithme peuvent être remplacées par des sous-classes afin de permettre des comportements différents tout en garantissant que l'algorithme global est toujours suivi."
Les modèles sont souvent combinés et nommés par plusieurs modèles, tels que le modèle MVC.
GOF ne possédait pas d'interface avec les classes Pure Abstract utilisées et exploitait également la capacité du C ++ d'hériter de plusieurs classes.
la source