2010-02-17 1 views
3

저는 최근에 CakePHP를 사용하여 몇 년 전에했던 프로젝트를 다시 작성하기 시작했습니다. 이번에는 모든 것을 '옳게'하려고 노력하고 있습니다. 그러므로 누군가가 다음과 같은 일을 할 때 포인터를 주려고합니다 :CakePHP에 특정 로직을 넣을 곳

Model-> find ('all')를 사용하여 테이블에서 간단한 테이블을 보여 드리겠습니다.)를 클릭합니다. 이 표에는 사용자에게 보여줄 필요가있는 두 가지 부울 필드가 있습니다. 그래서 : 0x0 = 'A', 1x0 = 'B', 0x1 = 'C', 1x1 = 'D'. 이 논리는 어디에 두어야합니까? 나는 다음과 같은 방법에 대해 생각을 해 봤는데 :

  1. 뷰를
  2. 컨트롤러는
  3. 모델 -이> ('모든') 찾을 수 있도록 모델에 뭔가가이 값을 출력하는보기 도우미 (심지어 가능합니까?)

이 작업은 사소한 것처럼 보일 수 있지만,이 프로젝트를 처음부터 체계적으로 유지 관리 할 수있는 방법을 배우게 될 것 같아요.

감사합니다.

답변

5

글쎄, 최종 테이블을 구성하는 논리 유형에 따라 다릅니다 (프레젠테이션이나 비즈니스입니까?).

명령 줄 인터페이스와 같은 새로운 유형의 UI를 추가한다고 가정 해보십시오. 네 테이블을 어떻게 보여줄거야? View에 전달 된 데이터는 HTML 및 콘솔 프리젠 테이션 모두에서 동일해야합니다. 따라서 해당 데이터를 준비하는 논리는 비즈니스 논리이며 모델에 배치해야합니다. 데이터를 표시하는 로직은 View에 배치해야합니다 (두 번 이상 사용 된 경우보기 도우미에 있음).

그리고 이런 유형의 로직을 컨트롤러에 두지 마십시오.

+1

동의합니다. 테이블이 렌더링되는 방법에만 관련된 것이면 ViewHelper에 배치하십시오. 그러나 이것이 모델 상태와 관련된 정보라면 모델에 배치하고 각 결합 상태에 이름을 지정하고 게터를 통해 액세스하십시오. – Gordon

+1

동의하십시오. 좋은 후가공 지원을 위해 afterFind 콜백에이 코드를 추가합니다. – harpax

-1

컨트롤러에서! 모델의 메서드가 컨트롤러에 제공됩니다. 이보기는 HTML UI 프로그래밍과 같은 출력을위한 것입니다.

+0

컨트롤러가 실제로 가장 최악의 장소입니다. 응답은 요청을 처리하는 것입니다. 얇은 컨트롤러와 뚱뚱한 모델이 필요합니다. – Gordon

+0

비즈니스 로직이 있어야 모델에서 YES입니다. – poo

1

어디서나 사용할 계획이라면 모델에 넣을 것입니다. 해당 값을 반환하는 모델에 메서드를 넣거나 afterFind 콜백에서 검색 한 모든 행을 반복하고 적절한 필드로 설정할 수 있습니다.

0

렌더링 스타일을 결정할 무언가라면이 논리를 뷰에 넣습니다. 그런 식으로 디자이너는 최대한의 액세스 권한을 가지며 이에 따라 스타일을 지정할 수 있습니다.

반면 데이터 모델링의 편의를 위해 두 개의 열만있는 경우 모델에 입력하십시오. 디자이너는 다른 가능성을 인식해서는 안됩니다!