2017-03-22 3 views
-2

일련의 이벤트를 따르기 위해 컨트롤러를 작게 유지하는 경향이 있으며 컨트롤러 동작이 비즈니스 논리를 처리하기 위해 모델 동작을 호출하도록 모델 동작과 모델 매퍼를 사용하는 것을 고려하고 있습니다. 요청 개체를 부모 모델 작업에 전달하는 것을 고려해 봤지만 컨트롤러에서 URL 매개 변수와 세션 데이터를 처리하여 비즈니스 논리를 준비하고 싶습니다. 예 :GET 요청 변수 처리

제 질문은이 논리가 컨트롤러에 있어야합니까? 좀 더 우아한 방식으로 이것을 처리하면 모든 컨트롤러가 모델에 대한 몇 가지 호출과 거의 같아 보이고 렌더링이 중요합니다. 예 :

indexAction(){ 

    $action = new Model_Action(); 
    $result = $action->doThings(); 
    switch($result){ 
    case 'wonderful': 
     $this->render('wonderfult_things'); 
     break; 
    case 'terrible': 
     $this->render('terrible_errors'); 
     break; 
    default: 
     $this->render('lorem ipsum'); 
    } 
} 

//in model: 
doThings(){ 
    $getVar = $this->_request['getVar']; 
    if(!empty($getVar)){ 
     $this->doOneAction(); 
    }else{ 
     $this->doOtherAction(); 
    } 
} 

아마도 여기 분할 머리카락을 해요,하지만 그것은 나 컨트롤러에 보인다 요청은 내가 뭔가를 할 모델을 호출하는 것보다 다른 아무것도 할 내 컨트롤러를 사용하는 것으로 보이지 않는다 단지 결코 더 가까운 관계를 가지고 다음 렌더링하십시오. 이것에 대한 의견이 있으십니까?

업데이트 : 예는 목록을 요청

. 한 요청이 범주의 제목을 반환하면 다른 요청은 추가 api 매개 변수를 사용하여 하위 범위의 특정 목록을 반환합니다. 응용 프로그램의 컨텍스트 내에서 데이터의 그래픽 표현을 공유하는 것이 더 복잡하지만 동일한 뷰를 공유하는 것이 좋습니다. 내 API를 더 잘 정의함으로써이 두 가지 사이의 지식에 대한 지식을 결정할 것입니다. 컨트롤러에서 모델 접촉에 사용자 인식 API 매개 변수 만 사용할 수 있습니까? 감사.

+0

컨트롤러를 사용하는 방법은 제 생각에는 컨트롤러가해야하는 것입니다. 요청을 받고 요청/서비스/모델 응답에 따라 무엇이 호출되어야하는지 (어떤 서비스/모델)를 결정한 다음 올바른 응답 (렌더링보기/리디렉션 등)을 보냅니다. 그러나 개발자 의견만큼이나 많은 의견이 있기 때문에 실제로는 꽤 의견을 바탕으로 한 질문입니다. 그것이 당신을 위해 작동한다면, 그것을하십시오. 모델은 요청 (GET/POST 등)의 매개 변수를 직접 _ _ 얻지 않아야합니다. 그러면 모델을 테스트하고 다른 목적으로 모델을 재사용하는 것이 더 어려워 질 것입니다. –

+0

MVC에 대한 참조를 제거한 운영자처럼 보이지만 내 질문을 업데이트 해 주셔서 감사합니다. – timdedrick

답변

0

컨트롤러는 UI와 응용 프로그램 간의 상호 작용 만 관리하는 것이 가장 이상적입니다. 따라서 비즈니스 로직을 컨트롤러에 배치해서는 안됩니다. 도메인 기반 디자인 (https://en.wikipedia.org/wiki/Domain-driven_design)을 따르려고한다면 모든 비즈니스 로직을 응용 프로그램/비즈니스 서비스와 모델 자체에 포함시켜야합니다.

예를 들어, 무엇을 doThings()이 실제로 비즈니스 로직과 관련이있는 것 같지는 않지만 사용자가 요청을 기반으로해야 할 일을 선택하기 때문에 사용자가 애플리케이션과 상호 작용하는 방식입니다. 매개 변수 getVar. 이 경우 해당 조건을 컨트롤러에 배치해야합니다.

서비스 및 모델은 사용자가 요청한 방식을 인식하지 않아야합니다. 원칙적으로 응용 프로그램은 웹 UI가 아닌 다른 UI를 통해 사용자와 상호 작용할 수 있습니다.

-1

어떤 코드가 컨트롤러에 있어야합니까? 사용자 입력 (유효성 확인, 인증 등), 적절한 서비스 호출 (서비스/모델을 통한) 및 모델 결과를 적절한 형식으로 변환하여 어떤 조치를 취해야하는지 결정하는 모든 논리는 컨트롤러에 속합니다.

대부분의 경우 해피 경로 결과, 오류 등 두 가지 유형의 응답을 렌더링합니다. 두 경우 모두 적절한 모델/응답을 만들고 콘텐츠를 적절하게 표시하는 동일한 템플릿 /보기를 렌더링하면됩니다.

+0

응용 프로그램이 더 복잡해지면 이후 재사용을 위해이 디자인을 사용하고 있다고 덧붙일 수 있습니다. 내 견적을 주셔서 감사하지만 내 JsonSerializable 내 모델에 의해 구현되지만 내 컨트롤러에 의해 JSON보기 개체에 허용 호출 할 수 있습니다. – timdedrick