2014-08-30 2 views
0

소프트웨어 디자인에 문제가 있습니다. 내가 컨트롤러, 구성 요소,보기 및 도우미 사이의 관계를 디자인하고 싶습니다. 이 모델들은 Aricle, Product, List입니다. ArticleProduct의 내용에는 목록 태그가 [LIST=1] 형태로 있습니다.컨트롤러, 구성 요소, 뷰 및 도우미 간의 관계를 디자인하는 방법

그래서이 목록을 렌더링하여 태그 대신 콘텐츠에 삽입하고 싶습니다. 좋은 생각은 ListRendererHelper 일 것이고 View과 같은 목록을 $this->ListRenderer->renderList($listId)과 같이 렌더링합니다. ID를 데이터베이스에 나열하면 좋은 생각이지만 콘텐츠에서 가져와야합니다. 그리고 이것은 View 안에있는 객체로 조작하는 것은 좋지 않으며 View에 많은 PHP 코드를 삽입하지 마십시오.

그래서 콘텐츠를 조작하는 가장 좋은 장소는 Controller이며, 여기에서 목록 ID를 얻는 것이 좋습니다. 하지만 ControllerHelper을 사용하지 않아야하므로 ControllerComponent으로 만들어야한다고 생각합니다. 그리고 여기에 내 문제가 있습니다. 왜냐하면 나는 Component에 두 번 렌더 코드를 작성해야하고 DRY에 반대하는 코드는 Helper입니다. 다른 해결책은 Component 안에 Helper을 호출하는 것입니다.하지만 이는 MVC 중단 일 수도 있습니다. 그렇다면 누구나 디자인 방법을 알고 있습니까?

답변

1

컨트롤러에서 데이터 조작 및 구성 요소의 코드 렌더링? 구성 요소 내부의 도우미 호출? 뭐야 ...? 이 단순한 잘못된 생각은 어디서 났습니까? MVC를 완전히 잘못 이해했습니다.

모델 메서드를 사용하여 데이터를 가져 오거나 데이터를 조작 할 수 있습니다. 모든 데이터 가져 오기 및 조작은 모델 계층에서 수행되어야합니다.

MyModel::getSomeFancyData($arg1, $arg2); 
MyModel::manipulateMyFancyData($data); 

컨트롤러는 데이터를보기로 전달합니다. 컨트롤러는 항상 가능한 한 슬림해야합니다.

$this->set('fancyData', $this->Model->getSomeFancyData()); 

보기 내부에는 되풀이보기 논리를 위해 도우미를 사용하십시오. 반복 할 HTML에 대해 큰 청크를 렌더링해야하는 경우 요소를 더 잘 사용하거나 도우미 내부에서 그 요소를 호출하십시오. 이 CakePHP를 특정하지 않습니다

, 당신은에서 이익이되지 않습니다

난 당신이 MVC의 기본과 CakePHP를 읽어하는 것이 좋습니다 MVC와 같은 기본 개념을 적용 할 수없는 모든 프레임 워크.

+0

나는 그 원칙을 알고 있지만 혼란 스럽다. 다른 모델에서 관련 모델을 사용할 수 있습니까? –

+0

그리고 도우미에서 요소()를 렌더링하는 가장 좋은 방법은 무엇입니까? –

+0

ClassRegistry :: init() 다른 모델을로드합니다. 뷰 클래스를 사용하여 도우미에서 $ this -> _ View-> element(); 원리를 아는 경우 구성 요소에서 헬퍼를 사용하는 것과 같은 MVC 위반을 요청하는 이유는 무엇입니까? – burzum

관련 문제