Несмотря на то, что вы можете следовать шаблону стратегии «Банды четырех», в настоящее время существуют другие инструменты, позволяющие делать то же самое, не создавая фабрики и полагаясь на распространение классов, которые наследуют подклассы или интерфейсы реализации, например, поскольку теперь можно использовать функциив качестве переменных мы можем предоставить карту Action
s, принимающую ваш тип ввода:
public static readonly IDictionary<string, Action<InputType>> HandlerMap =
new Dictionary<string, Action<InputType>>
{
["A"] = DoAlgorithmA,
["B"] = DoAlgorithmB,
["C"] = DoAlgorithmC,
["D"] = (input) => Console.WriteLine("Too simple to need a method")
...
};
, где InputType
- это тип вашей input
переменной, а DoAlgorithmA
и т. д. - просто методы, принимающие InputType
(и если методы действительно лаконичны, вы даже можете использовать лямбду здесь), например,
public static void DoAlgorithmA(InputType input)
{
...
}
В таком случае вызов будет выглядеть так:
public async Task<IActionResult> OnPostAsync()
{
if (HandlerMap.TryGetValue(option, out var algorithm))
{
algorithm(input);
}
// .. else this isn't a valid option.
}