J'essaie de refacturer mon code. Actuellement, j'ai des noms de méthodes différents pour un type de funcitonalité similaire, comme indiqué ci-dessous. mais je veux utiliser quelque chose comme ci-dessous. Mais vous ne savez pas comment transmettre des paramètres dans le cas de commutation pour définir la stratégie. Les interfaces sont injectées à l'aide du CIO. Ou s'il vous plaît laissez-moi savoir la bonne façon de refacturer mon code. p>
3 Réponses :
Votre classe de contexte ( ExempleFesservice code>) ne doit pas savoir qu'il existe différentes implémentations d'un comportement particulier (stratégies). Au lieu de la classe de contexte étant responsable de l'instanciation d'une stratégie, vous devez adopter la stratégie comme sa dépendance. De cette façon, vous obtenez un couplage lâche lorsque l'instanciation pourrait dépendre de nombreux facteurs en dehors du cadre de la classe de contexte et peut également être assez complexe. Il vous permet également d'ajouter plus de stratégies à l'avenir sans avoir à modifier ExemplesFesservice code>. if (useA)
{
// bind IReminderStrategy to StrategyA
}
else
{
// bind IReminderStrategy to StrategyB
}
Vous auriez besoin d'une classe de plus (concret de concret) ici pour implémenter la méthode d'interface et de transmettre vos objets (stratégie ou stratégie) en tant que paramètres dans de nouveaux objets de classe (concreteclass), puis appelez la méthode lorsque vous avez besoin.
switch (message)
{
case "A":
concreteObject.SampleMethod(new StrategyA());
break;
case "B":
concreteObject.SampleMethod(new StrategyB());
break;
default:
break;
}
....
concreteObject.Execute(inputMessage)
class Concrete
{
IReminderStrategy _reminderStrategy;
public void SampleMethod(IReminderStrategy reminderStrategy)
{
_reminderStrategy = reminderStrategy
}
public void Execute(string message)
{
_reminderStrategy.GenerateReminders(message);
}
}
Tout d'abord, j'utilise fréquemment des modèles de méthodes de stratégie ou de modèle, car vous prenez l'avantage d'une envoi dynamique ou d'un polymorphisme et que vous vous débarrassez principalement des blocs if-sinon. Je veux dire que vous mettez cette logique au même endroit, alors empêchez les SI-ESSES qui sont dispersés à plusieurs endroits. Pour une étude ultérieure, vous pouvez les comparer à des fonctions d'ordre supérieur dans la programmation fonctionnelle. 1) Instanciez et passez la stratégie (à des fins pédagogiques, c'est-à-dire d'illustrer clairement.) p> puis dans quelque part et une étape avant le client: p> < Pré> xxx pré> enfin dans le client: p> 2) ou directement: p> et éventuellement dans un autre service: p>
Vous devez mettre en œuvre la méthode de l'interface dans les stratégies A & B d'abord. Dans lequel vous commencez ensuite vos tâches.
Je pense que vous devez passer "A" et "B" comme paramètre à la méthode d'interface Ireminderstrategy. Vous devriez vérifier cet article Adamstorr.Azurwebsites.net/blog/...<< a>