2010-07-12 4 views
2

다양한 IRC 채널에서 물어 보았지만 그 배후에 확실한 설명이있는 답을 얻을 수 없었습니다. 모델 (트랜잭션 실패와 같은 모델 관련)이 모델 또는 컨트롤러에서 처리되어야합니까?모델 또는 컨트롤러에서 오류 처리?

미리 도움을 청하십시오.

편집

음, 혼란 것은 (모델의) 내 코드는 이미이 같은 뭔가를 보이는 것입니다 :

try 
{ 
    // Connect to MongoDB 
    // Fetch a record 
} 
catch (MongoConnectionException $e) 
{ 
    // Handle this error 
} 
catch (MongoException $e) 
{ 
    // Handle this error 
} 

그래서, 나는 예외 MongoDB의 수익률에 따라 예외를 반환해야합니다

? 아니면 이러한 예외가 컨트롤러에 버블 링되도록 직접 허용해야합니까?

감사합니다.

답변

4

정답은 "모두"이지만 대개 모델에 있습니다.

컨트롤러가 수행해야 할 적절한 작업은 모델이 throw하는 예외를 잡아 내고 멋진 "whups"메시지를 출력하는 것입니다. 모델 구성 방법에 따라 컨트롤러가 일부 로깅을 수행하는 것이 적절할 수 있습니다.

예외를 잡는 것 외에 로그에 쓰는 것 (모델 인프라에서 수행하지 않는 경우)과 예쁜 오류를 표시하는 것은 컨트롤러에 속하지 않습니다.

+0

안녕하세요. 업데이트 된 질문에서이 접근 방법으로 직면 한 문제를 언급했습니다. 어떻게 처리해야하는지에 대한 귀하의 입장을 설명해 주시겠습니까? 감사합니다. –

+0

연결 예를 예로 들어주십시오. 모델이 의미있는 행동을 취할 수 있습니까? 아마도 아니, 몽고 멀리 갔다. 모델에 구운 로그인 인프라가있는 경우 로그에 내용을 기록 할 수 있습니다. 그러나 이것이 고칠 수 없으므로 컨트롤러가 결국 잡을 새로운 예외를 던져야합니다. 모델이 할 일이 전혀 없다면 예외를 잡아 내지 말고 단지 컨트롤러까지 버블 링하십시오. – timdev

+0

그 설명에 감사드립니다, 팀버님! 당신은 그것을 매우 분명하게 나타내고 당신의 결정 뒤에있는 논리를 설명합니다. 고맙습니다! :) –

2

트랜잭션 오류와 같은 오류는 이러한 경우 비즈니스 로직 문제입니다. 따라서 모델에서 처리해야하며 적절한 알림이 컨트롤러로 다시 전달됩니다.

지방 모델, 스키니 컨트롤러.

+0

죄송 종류의 주제를 이동,하지만 당신은 컨트롤러까지 다시 알림을 통과 제안하는 방법이 경우에하는 것? 전역 상수? 특히 발생할 수있는 오류가 여러 개인 경우에는 상수가 필요할 것입니다. 그런 다음, 다시 이러한 상황에서 사용할 수 있다고 생각합니까, 전혀 다른 방법이 있습니까? –

+1

모델은 그들이 만든 모든 엉망을 정리해야하며 (시스템이 유효한 상태인지 확인해야합니다.) 컨트롤러 레이어가 catch하고 처리 할 수있는 몇 가지 예외 유형을 throw합니다. – timdev

0

ASP.NET 용 Scott Guthrie C#은 컨트롤러를 예외 처리기로 사용하도록 제안합니다. 그는 또한 프로젝트를 위해 도우미 객체와 핸들러를 설정하도록 제안합니다. 이렇게하면 정상적으로 개발을 계속할 수 있습니다.

그러나 PHP MVC는 아직 초기 단계이므로 구현이 완벽하지 않을 수 있습니다.

나는 일단 당신이 결정을 내렸을 때 당신이 그 솔루션을 어떻게 다루고 그 패턴을 따르는 지 결정했다면 그렇게 생각할 것입니다.

+0

그래서 대부분의 "액션"을 도우미 객체 및 핸들러로 옮기는 것을 지원합니까? 이것은 흥미로운 생각입니다. 정교하게 말씀해 주시겠습니까? –

+0

호기심에서 PHP MVC가 아직 초기 단계에 있고 구현 * 무엇이 빠졌습니까? 내 말은, 그 패턴이 복잡하지 않다는 거지, 그렇지? – Gordon

+0

PHP의 객체 개발 모델은 유아적이고 아직 완전히 본격적인 OOP로 여겨 질 것입니다. 하지만, 이것은 의견이며 ... 소금 한알과 같이 받아 들여야합니다. 완전한 MVC 애플리케이션을 운영 할 수있는 많은 해결책과 해결책이 있습니다. –

0

MVC 프레임 워크의 아이디어는 매우 단순하고 매우 유연합니다. 아이디어는 요청의 인수를 기반으로 프레임 워크 내에서 응용 프로그램의 시작을 제어하는 ​​단일 컨트롤러 (예 : index.php)가 있다는 것입니다. 여기에는 보통 적어도 호출 할 모델, 이벤트 및 일반적인 GET 인수를 정의하는 인수가 포함됩니다. 거기에서 제어기는 요청 (인증, 유효 모델, 요청 위생 처리 등)을 검증하고 요청 된 이벤트를 실행합니다.

현재 실제 프레임 워크는 두 가지뿐입니다 ... 이것은 코딩, 지원 및 향후 릴리스에서 문제가 될 수 있습니다. 하지만 MVC를 지원하기 위해 확장 된 프레임 워크가 많이 있습니다.

초기 단계는 급한 배달과 문서의 열악한 결과로 현재의 프레임 워크, 솔루션 및 지원이 제한된다고 말하고 제안하는 것입니다. 또한, 나에게 맞는 것을 제안하고 과거에 나를 위해 일해왔다.

난 강력하게 This Website

+0

링크 고마워요, 조. 나는 그것을 체크했고 아이디어는 PHP MVC에도 적용되는 것처럼 보였다. 감사! –