2011-08-02 4 views

답변

0

긴 if/else 문에 근본적으로 잘못된 점은 없습니다.

눈에 띄지 않는 경우, 각 if/else 블록의 내용을 자체 기능으로 정의하는 것이 어떻습니까?

중복 제거를 고려할 수도 있습니다. 모두 끝나면

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

각 블록에서 반복 할 필요가 없습니다.

+0

아니요. 두 번째 것은 RespondLoginMsg 대신 RespondLogoutMsg입니다. – Tattat

+0

Aha. 미안 해요. 미안 해요. – craigmc

2

아마도 스위치가 읽기 쉬울 것입니까? 그리고 sendMsg 어느 쪽이든 그것을 밖으로 이동하고 .. 과도한 간격과 줄 바꿈을 제거하기보다는 다른

$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

내가 볼 수없는 경우 당신은 스위치 없음에 설정된 $ aMsg 개체/사용 할 수 있습니다 이게 무슨 문제 야? 항목이 인스턴스인지 확인하려면 몇 개의 클래스가 필요합니까? 그 목록이 꽤 제한적일 것 같은데. 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

나는 소스 코드를 줄였으며, 최대 200 개의 메시지를 가지고있다 .... 그들은 비슷한 방식으로 작동한다. 그래서 나는 단지 몇 개를 복사하고 여기에 게시한다. – Tattat

+1

최대 200 개의 다른 유형의 메시지가 있습니까? 왜냐하면 나는 타입에 대해서 이야기하고 있기 때문입니다. 그리고 이것은 여러분이 200 가지의 클래스를 가지고 있다는 것을 의미합니다. 그것은 과도하다. 아마도 하나의 메시지 클래스를 만들고 클래스의 각 메시지 유형에 대한 함수를 만들 수 있습니다. 그런 다음 유형을 검사하고 적절한 함수를 호출하는 루프를 만들 수 있습니다. 이 함수는 필요한 모든 서브 콜을 만듭니다. 그렇게하면이 기능에 넣을 필요가 없습니다. 코드를보다 깨끗하게 유지하고 재사용 할 수 있습니다. – pthurmond

관련 문제