다음은 코드입니다. My if, else statement is very long ... 어떻게 분리합니까? 어떠한 제안? 고맙습니다.이 코드를 더 잘 조직하는 방법
답변
긴 if/else 문에 근본적으로 잘못된 점은 없습니다.
눈에 띄지 않는 경우, 각 if/else 블록의 내용을 자체 기능으로 정의하는 것이 어떻습니까?
중복 제거를 고려할 수도 있습니다. 모두 끝나면
$aMsg = new RespondLoginMsg();
$this->sendMsg($aMsg);
각 블록에서 반복 할 필요가 없습니다.
아마도 스위치가 읽기 쉬울 것입니까? 그리고 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);
내가 볼 수없는 경우 당신은 스위치 없음에 설정된 $ 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***/
}
나는 소스 코드를 줄였으며, 최대 200 개의 메시지를 가지고있다 .... 그들은 비슷한 방식으로 작동한다. 그래서 나는 단지 몇 개를 복사하고 여기에 게시한다. – Tattat
최대 200 개의 다른 유형의 메시지가 있습니까? 왜냐하면 나는 타입에 대해서 이야기하고 있기 때문입니다. 그리고 이것은 여러분이 200 가지의 클래스를 가지고 있다는 것을 의미합니다. 그것은 과도하다. 아마도 하나의 메시지 클래스를 만들고 클래스의 각 메시지 유형에 대한 함수를 만들 수 있습니다. 그런 다음 유형을 검사하고 적절한 함수를 호출하는 루프를 만들 수 있습니다. 이 함수는 필요한 모든 서브 콜을 만듭니다. 그렇게하면이 기능에 넣을 필요가 없습니다. 코드를보다 깨끗하게 유지하고 재사용 할 수 있습니다. – pthurmond
- 1. 파일을 가장 잘 조직하는 방법
- 2. 어떤 코드를 더 잘
- 3. MySQL -이 작업을 더 잘 수행하는 방법?
- 4. XLinq -이 코드를 가지고 더 좋은 방법
- 5. 코드를 더 잘 읽는 법을 배우기위한 자료
- 6. 이 MySQL 쿼리를 더 잘 수행하려면 어떻게해야합니까?
- 7. 상대 경로를 더 잘 처리하는 방법
- 8. 생성 된 코드를 가장 잘 통합하는 방법
- 9. 이 코드를 작성하는 더 좋은 방법이 있습니까?
- 10. 이 코드를 더 작게 만들 수 있습니까?
- 11. Android에서 이미지를 더 잘 처리하는 방법
- 12. 이 코드를 개선하는 방법
- 13. 이 코드를 최적화하는 방법
- 14. Verilog에서 RAM을 더 잘 코딩하는 방법
- 15. mysql이 union 쿼리를 더 잘 수행하는 방법
- 16. 이 코드를 더 최적화 할 수 있습니까?
- 17. PHP -이 코드를 더 짧게 만들기
- 18. 이 루비 코드를 더 빠르게 최적화하려면 어떻게해야합니까?
- 19. 이 코드를 좀 더 일반적인 것으로 만들 수있는 방법
- 20. 더 우아한 코드를 작성하는 방법
- 21. Arel을 더 잘 이해하기
- 22. 이 LINQ to XML을 더 잘 작성할 수 있습니까?
- 23. 이 아주 잘 작동
- 24. 어떻게 커널 C 프로그래밍 코드를 더 잘 이해할 수 있습니까?
- 25. 다국어 자바 스크립트 코드를 더 잘 구조화하는 방법은 무엇입니까?
- 26. 이 PHP 코드를 단순화하는 방법?
- 27. 이 메뉴 코드를 개선하는 방법
- 28. 이 정규식을 더 잘 수행 할 수 있습니까?
- 29. 이 SQL 문을 더 잘 수행 할 수 있습니까?
- 30. 이 순환 데이터 참조가 더 잘 설계 될 수 있습니까?
아니요. 두 번째 것은 RespondLoginMsg 대신 RespondLogoutMsg입니다. – Tattat
Aha. 미안 해요. 미안 해요. – craigmc