Le modèle de stratégie et l'injection de dépendance nous permettent tous les deux de définir / injecter des objets au moment de l'exécution. Quelle est la différence entre le modèle de stratégie et l'injection de dépendance?
Réponses
Trop de publicités?DI et de la Stratégie de travail de la même manière, mais la Stratégie est utilisé pour la plus fine et courte, dépendances.
Lorsqu'un objet est configuré avec un "fixe" de la Stratégie, par exemple lorsque l'objet est construit, la distinction entre Stratégie et DI brouille. Mais dans un DI scénario, il est plus rare que les dépendances des objets changent au cours de leur vie, alors que ce n'est pas rare avec la Stratégie.
Aussi, vous pouvez passer à des stratégies comme des arguments de méthodes, tandis que la notion de méthode d'injection d'argument n'est pas très répandue et généralement utilisé dans le contexte de tests automatisés.
La stratégie met l'accent sur l'intention et vous encourage à créer une interface avec les différentes implémentations qui obéissent à la même comportement contrat. DI est plus sur d'avoir une mise en œuvre de certains comportements et de les communiquer.
Avec DI, vous pouvez décomposer votre programme pour des raisons autres que juste pour être en mesure d'échanger de parties de la mise en œuvre. Une interface utilisée dans DI avec une seule mise en œuvre est très commun. Une "Stratégie" avec une seule mise en œuvre concrète (jamais) n'est pas un réel problème, mais est probablement plus proche de DI.
La différence, c'est ce qu'ils essaient d'atteindre. Le modèle de Stratégie est utilisée dans des situations où vous savez que vous voulez échanger des implémentations. Comme un exemple, vous pourriez vouloir formater les données de différentes façons - vous pouvez utiliser le modèle de stratégie de remplacement de l'un XML formateur ou CSV formateur, etc.
L'Injection de dépendance est différent, du fait que l'utilisateur n'est pas d'essayer de changer le moteur d'exécution de comportement. En suivant l'exemple ci-dessus, nous avons peut-être la création d'un export XML programme qui utilise XML formateur. Plutôt que de structurer le code comme ceci:
public class DataExporter() {
XMLFormatter formatter = new XMLFormatter();
}
vous 'injecter' le formateur dans le constructeur:
public class DataExporter {
IFormatter formatter = null;
public DataExporter(IDataFormatter dataFormatter) {
this.formatter = dataFormatter;
}
}
DataExporter exporter = new DataExporter(new XMLFormatter());
Il y a quelques justifications pour l'Injection de Dépendance, mais la principale est pour les tests. Vous pourriez avoir un cas où vous avez un moteur de persistance d'une certaine sorte (base de données). Cependant, il peut être une douleur à l'utilisation d'une base de données lorsque vous êtes en cours d'exécution des tests à plusieurs reprises. Donc, pour votre cas de test, vous donneriez un mannequin de base de données, de sorte que vous ne supportez pas que les frais généraux.
À l'aide de cet exemple, vous pouvez voir la différence: nous avons toujours compter sur l'aide d'un stockage des données stratégie, et c'est celui que l'on passe en réel DB d'instance). Cependant, de développement et de test, nous voulons utiliser les différentes dépendances, de sorte que nous injecter différentes concrétions.
Mec, injection de dépendance est plus tendance générale, et c'est la question de la dépendance sur des abstractions pas concrétions et c'est une partie de chaque modèle, mais le modèle de Stratégie est une solution à des problèmes plus spécifiques
c'est la définition de wikipedia:
DI:
L'injection de dépendance (DI) dans orientée objet de la programmation informatique est un modèle de conception avec un noyau principe de séparation de comportement de la part de de la résolution des dépendances. En d'autres termes: une technique de découplage très dépendant de composants logiciels.
Modèle De Stratégie:
En programmation informatique, la stratégie modèle (aussi connu comme la politique pattern) est un logiciel particulier modèle de conception, selon laquelle les algorithmes peuvent être sélectionné lors de l'exécution.
Le modèle de stratégie est destinée à fournir un moyen de définir une famille de les algorithmes, les encapsuler chacun comme un objet, et de les rendre interchangeables. Le modèle de stratégie permet à l' les algorithmes varient indépendamment de les clients qui les utilisent.
Puis-je reprase la question par le remplacement de la "différence" avec la "relation" entre l'Injection de Dépendance et de la Stratégie? La stratégie est une arène pour utiliser votre dépendance à l'injection de compétences. Des moyens concrets pour mettre en œuvre l'injection de dépendance sont comme suit:-
- Les événements
- Les fichiers de Configuration de l'unité ou de la structure de la carte(ou par programmation) etc.
- Les Méthodes D'Extension
- Abstrait modèle de Fabrique
- L'Inversion de modèle de contrôle(utilisé par la stratégie et de l'Abrégé de l'Usine)
Il y a une chose qui rend la stratégie tient une place à part. Comme vous le savez, dans l'Unité au démarrage de l'application toutes les dépendances sont ensemble nous ne pouvons pas changer. Mais la stratégie runtime prend en charge la dépendance de changement. Mais NOUS avons à gérer la dépendance pas de la responsabilité exclusive de Modèle de Stratégie.
En fait la stratégie de ne pas parler de l'injection de dépendance. Si besoin, il peut être fait par le biais de l'Abrégé de l'Usine à l'intérieur d'un modèle de Stratégie. La stratégie ne parle que de la création d'une famille de classes de l'interface et de "jouer" avec elle. Pendant la lecture, si nous constatons que les classes sont dans un autre niveau, alors nous devons injecter de nous-mêmes, mais pas le travail de "stratégie".