Как сделать этот код более организованным - PullRequest
0 голосов
/ 02 августа 2011

Вот код ... Мой оператор if, else очень длинный ... Как его отделить? Любое предложение? Спасибо.

public function receiveMsg(aMsg){
    if($aMsg instanceof LoginMsg){
         $this->callingSomeMethod();         //should I separate this code into other class/ object? 
         $this->callingAnotherMethod();  //should I separate this code into other class/ object? 

         $aMsg = new RespondLoginMsg();  //should I separate this code into other class/ object? 
         $this->sendMsg($aMsg);          //should I separate this code into other class/ object? 

    }else if(aMsg instanceof LogoutMsg){
         $this->callingSomeMethod();     //should I separate this code into another class/ object? 

         $aMsg = new RespondLogoutMsg();     //should I separate this code into another class/ object? 
         $this->sendMsg($aMsg);               //should I separate this code into another class/ object? 


    }else if/*****bababab***/

    /*****many else if here (up to 200 msg+ , just upload 2 here.)***/


}

Ответы [ 3 ]

2 голосов
/ 02 августа 2011

Возможно, переключатель легче читать?И sendMsg можно было бы удалить из него в любом случае и просто использовать объект $ aMsg, который вы установили в swtich / if ..

$strMessageClass=get_class($aMsg);
switch ($strMessageClass) {
    case 'LoginMsg':
        $this->callingSomeMethod();
        $aMsg = new RespondLoginMsg();
    case 'RespondLogoutMsg':
        $this->callingAnotherMethod();
        $aMsg = RespondLogoutMsg();
    default:
        // If you have any..
}
$this->sendMsg($aMsg);
0 голосов
/ 02 августа 2011

Кроме избавления от лишних пробелов и разрывов строк, я не вижу, в чем здесь проблема. Сколько разных классов нужно проверить, является ли предмет экземпляром? Сдается мне, что список будет довольно ограничен здесь. Если у вас не более 3 или 4 операторов if / else, просто оставьте его в if / else. В противном случае используйте переключатель или петлю.

Можете ли вы быть более точным относительно того, что вы пытаетесь достичь?

Вот немного более чистая версия вашего кода.

public function receiveMsg(aMsg) {
  if ($aMsg instanceof LoginMsg) {
    $this->callingSomeMethod(); 
    $this->callingAnotherMethod();

    $aMsg = new RespondLoginMsg();
    $this->sendMsg($aMsg);
  }
  else if (aMsg instanceof LogoutMsg) {
    $this->callingSomeMethod(); 

    $aMsg = new RespondLogoutMsg();
    $this->sendMsg($aMsg);
  }
  else if { /*****bababab***/

  }
  /*****many else if here***/
}
0 голосов
/ 02 августа 2011

Я не вижу ничего принципиально неправильного в длинном операторе if / else, если это то, для чего он нужен.

Если вы считаете, что это бельмо на глазу, почему бы просто не определить содержимое каждого блока if / else как его собственную функцию?

Вы также можете рассмотреть возможность устранения избыточных сообщений. Если все они заканчиваются на

     $aMsg = new RespondLoginMsg();
     $this->sendMsg($aMsg);

тогда нет необходимости повторять это в каждом блоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...