Я искал несколько статей о рефакторинге большого оператора switch
.
Но они не делают то, что я хочу.Проблема Я собираюсь перейти к , чтобы иметь гигантский оператор switch, который вызывает другой метод в зависимости от двух разных значений, скажем, type
и code
.
В настоящее время я бы справился со следующей ситуацией:
switch (type)
{
case Types.Type1:
handleType1(code);
break;
case Types.Type2:
handleType2(code);
break;
}
void handleTypeN(code)
{
switch (code)
{
...
}
}
Может быть, что-то, что объединяет шаблон фабрики и команд, поможет мне?Я, должно быть, упускаю что-то очевидное.
Как бы вы изменили этот код?
Возможно, мне нужно будет немного подробнее рассказать о сценарии, с которым я столкнулся.
Я получаю пакеты с сервера.Пакет содержит тип, код и некоторую конкретную информацию.
Как только данные поступают, я извлекаю type
и code
пакета, и он поступает в оператор switch
дляtype
, после выяснения type
вызывается специальный метод для выполнения переключения на code
пакета.
Метод, который обрабатывает код, теперь декодирует пакет дальше, и процесссделано.
+----------+ +----------+
| | 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)