2010-11-22 6 views
0

이 뒤에 진짜 문제와 질문, 단지 내 아픈 마음의 제품 및 그래서,이 PHP 응용 프로그램의 상단에 구축이 :)PHP : 코드 디자인 딜레마

약간 이상한 일을하는 드라이브 내 자신의 MVC 지향 프레임 워크 (예, 기존 프레임 워크를 사용하지 않고 직접 제작했습니다). 모델 (데이터 및 데이터베이스 조작),보기 (데이터 및 렌더링 출력으로 채워진 템플릿) 및 컨트롤러 (요청 처리, 모델에서 적절한 데이터 가져 오기, 데이터보기) 등이 모델에 포함되어 있습니다. 요청 라우팅이 .htaccess 규칙으로 완료된 클래식하고 지루한 시나리오.

어제 코드 수정, 버그 수정, 몇 가지 개선 등으로 어제 컨트롤러의 코드를 재 배열해야한다는 강한 충동을 느꼈습니다. 그들은 다소 무겁고 부풀어 오르고 많은 방법으로 파일을 탐색하는 것을 어렵게 만듭니다. 나는 모두가 내가 말하는 것을 알고있을 것이라고 확신한다.

저는 컨트롤러 클래스를 여러 클래스로 나누는 것에 대해 생각하고 있습니다. 각 클래스는 login 또는 register 또는 showProfile 또는 killMe와 같은 요청 유형 하나만 처리합니다.

이제 컨트롤러 클래스는 사용자 친화적 인 (또는 SEO 친숙한) URL 부분에 해당하는 공용 메소드를 가지며 라우팅 클래스는 적절한 컨트롤러를 호출하고 URL 내용에 따라 메소드를 호출합니다.

변경 약간의 라우팅 메커니즘을 특정 컨트롤러를 호출하는 것으로 바꾸려면 Execute() 메소드가 필요하다고 생각합니다. 예를 들어

는, URL = "www.example.com/users/login"에 대한 지금은 다음과 같습니다

$controller = new url[0](); 
$method = url[1]; 
echo $controller->$method(); 

와 지금 URL이 "www.example.com/login"로 변경됩니다 및 라우팅 코드는 같을 것이다 :

$controller = new url[0](); 
controller->Execute(); 

가 나는 URL을 구문 분석하고 내 질문에 무관으로 그들로부터 정보를 라우팅 추출 부분을 생략.

변경 사항에서 나는 어떤 이점이 있습니까?

  • 하나의 전용 클래스 요구 한 당
  • 작은 파일
  • 작은 코드
  • 쉽게 유지 보수
  • 새로운 기능 (요청 새로운 유형) 또는 고정 버그를 추가 할 때 컨트롤러를 작동 파괴의 제한으로 위험

단점?

  • 가능성이 클래스의 많은
  • 가능한 성능
  • 충돌 ???

내 질문은 당신이 그 아이디어에 대해 어떻게 생각 하느냐에 대해 전혀 이해가되지 않습니다. 그리고 물론 내가 왜 내가해야하는 것보다 그것을하지 말아야하는지 더 관심이 있습니다.그래서 너무 늦기 :

질문의 해명 편집하기 전에 지금 말하십시오 끔찍한 아이디어와 가증 한 것이 왜 어떤 이유를 생각할 수있는 경우 :

내가 여부 부탁 해요를 많은 단일 유형의 요청을 처리하는 많은 소형 컨트롤러에이 방법을 사용하여 여러 유형의 요청을 처리하는 단일 단일 컨트롤러를 손상시켜야합니다.

이제 "login", "showLoginForm", "register", "activate"등과 같은 요청을 처리하는 컨트롤러 사용자가 있습니다. 리팩토링 된 코드는 이러한 각 요청에 대해 별도의 컨트롤러로 구성됩니다.

+0

[FrontController] (http://martinfowler.com/eaaCatalog/frontController.html)에서 [트랜잭션 스크립트] (http://martinfowler.com/eaaCatalog/transactionScript.html)를 호출해야하는지 또는 [PageController] (http://martinfowler.com/eaaCatalog/pageController.html) 또는 다른 것? 나는 당신이 찾고있는 것을 정확히 얻지 못합니다. – Gordon

+0

내가 묻는 것에 대한 설명을 추가했습니다. – grapkulec

답변

0

이전 방법과 새로운 방법 모두에 대해 내가 생각할 수있는 단점은 URL을 클래스 이름에 직접 매핑한다는 것입니다. URL을 변경하려면 클래스 이름을 변경해야합니다. 다른 언어에 대해 다른 URL을 사용하려면 클래스 이름에 URL을 매핑 할 레이어를 추가해야합니다. 이 때문에 클래스 이름에 URL을 매핑하는 라우팅 클래스를 사용하여 솔기를 변경하는 것이 좋습니다.

+0

좋은 지적입니다. 나는 그들을 처리하는 실제 코드에서 URL을 분리하는 것에 대해 생각해야한다. 현재 매핑은 매우 융통성이 없다. – grapkulec

+0

이것이 내가 내 코드에서했던 것과 정확히 일치하고 있기 때문에 나는이 질문에 답을하고있다. 이 질문 작성 :) – grapkulec