Я искал несколько статей по рефакторингу большого оператора switch
.
Но они не делают то, что я хочу делать. Проблема , к которой я собираюсь обратиться к , заключается в наличии гигантского оператора switch, который вызывает другой метод в зависимости от двух разных значений, скажем, тип
и код
.
В настоящее время я бы справился с ситуацией следующим образом:
switch (type)
{
case Types.Type1:
handleType1(code);
break;
case Types.Type2:
handleType2(code);
break;
}
void handleTypeN(code)
{
switch (code)
{
...
}
}
Может быть, мне поможет что-то, что объединяет фабрику и шаблон команды? Мне, должно быть, не хватает чего-то очевидного.
Как бы вы реорганизовали этот код?
Мне, возможно, нужно уточнить, с каким сценарием я столкнулся.
Я получаю пакеты с сервера. Пакет содержит тип, код и некоторую конкретную информацию.
Как только данные поступают, я извлекаю тип
и код
пакета, и он попадает в switch
для типа
, после определения типа
вызывается конкретный метод для выполнения переключения на код
пакета.
Метод, обрабатывающий код, теперь декодирует пакет дальше, и процесс завершен.
+----------+ +----------+
| | Packet | |
| Server | -------------> | Client |
| | | |
+----------+ +----------+
|
|
(Switch on the type of the packet and call a specific method)
|
|
(Switch on the code of the packet and call a specific method)
|
|
(Respond to the server or not)