Пишу для заказчика систему, в основной части которой - выполнение определенного сценария в зависимости от параметров.
Параметров всего два (привожу упрощенный код):
string paramA;
string paramB;
paramA может иметь 2 значения - in, out. paramB - 5 значений: one, two, three, four, five.
При наступлении каждой пары значений paramA-paramB последовательно выполняется несколько действий, причем действия для всех пар одинаковые, но в разном порядке стартуют.
Все действия - суть методы одного класса. Параметры глобальны.
Сейчас код выглядит примерно так (не стал заполнять все ветки, и так суть ясна, думаю):
Worker w = new Worker();
switch (paramA)
{
case "in":
switch (param2)
{
case "one":
w.do1();
w.do2();
w.do3();
break;
case "two":
w.do2();
w.do4();
break;
case "three":
w.do1();
w.do5();
w.do2();
break;
case "four":
break;
case "five":
break;
}
break;
case "out":
break;
default:
break;
}
Методов всего 20. Получается ужасно огромный свитч, не говоря уже о том, что в кейсах очень много дублирующегося кода (т.к. вызываются одни и те же методы).
Подскажите, может быть есть какой-то способ это все упростить? Например, как-то собрать структуру типа такой:
in-one => { w.do1(); w.do2(); w.do3() }
in-two => { w.do2(); w.do4(); }
И выполнять нужный блок в зависимости от ключа?
Моего опыта в c# (две недели) не хватает, чтобы что-то нафантазировать.