Шаблон проектирования для больших вложенных операторов switch

Я искал несколько статей по рефакторингу большого оператора 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)
5
задан Kevin 5 July 2011 в 11:06
поделиться