2012-06-23 7 views
0

REST 사양을 따르려고하는 응용 프로그램을 설계하고 있습니다. 나는 그것을 설계하는 가장 좋은 방법을 찾아 내려고 노력하고있다.MVC에서 RESTful 디자인 패턴?

:

그래서 내가 그래서 나는 다음과 같은 검사를 할 필요가 내 게시물 요청에서 "후"내 컨트롤러 방법 및 모델

// in controller 
function post() 
{ 
    //call post model here 
} 

이있는 POST 호출을하고 있어요 가정 해 봅시다

-validate fields 
-make sure item name is unique for that user 
-make sure there are less than 10 items 
-etc (there could be more cases) 

컨트롤러 포스트 기능에서 나는 어떤 일이 일어 났는지에 따라 REST 메시지와 상태 코드를 반환 할 것입니다.하지만이 모든 체크를 유지하는 것이 더 좋은지 궁금합니다.

나는 모델의 모든 검사를 넣어 다음과 같은 배열의 어떤 종류를 반환 할 수 있습니다

array('text' => 'return response text/array or whatever here', 'code' => '200/400/etc') 

그럼 그냥 컨트롤러에 반환이, 또는 내 각 기능에 이러한 판정을 중단하는 것이 좋습니다 모델을 만든 다음 컨트롤러에서 모든 검사를 수행합니까? 보기의 디자인 관점에서

// in controller 
function post() 
{ 
    //if validation fails -> send response 
    //if name is not unique -> send response 
    //etc... 
} 

, 내가 잠재적으로 다른 방법에서 프로젝트 모델의 "POST"메소드를 호출하기를 원한다면, 내가 할하지만 경우에, 그것을 처리 할 수있는 모든 포괄 기능이없는 것 하나의 모델 기능으로 모든 것을 유지하면 재사용 성이별로 없습니다. 면을 선택해야한다면 어쨌든 그 "체크 함수"를 너무 많이 재사용 할 필요는 없을 것입니다. 그러나 컨트롤러가 아닌 모델에서 모든 응답 정보를 갖는 것이 이상하게 보입니다.

아무에게도 이것에 대한 의견을 내 주실 수 있습니까?

답변

1

내가 모델 내부 포스트 방법을 만들 것입니다 사용합니다 재사용이 불가능하고 가독성이 떨어지는 프레임. 예를 들어 모델의 post 메서드 대신 create 메서드를 만들 것입니다.

데이터 유효성 검사를위한 모든 방법이 없습니다. 여러 데이터 유형 (예 : 사용자 이름 유효성 검사 클래스가 정규식과 일치하고 고유한지 확인하는 등)에 대해 하나의 메소드 validate 만있는 유효성 검사 클래스를 만드는 것이 좋습니다. 모든 조치 (DRY)에 유효성 검사 코드를 복사하는 것보다 낫습니다. 이 클래스 메소드를 어디에 호출할까요? 그것은 달려있다. 액션에서 간단하게 호출 할 수 있습니다. 유효성 검사 코드가 유효성 검사 클래스 안에 있으므로 괜찮을 것입니다. 요청을 받아들이고 수행해야 할 유효성 검사 등을 결정하는 맵퍼를 만들 수도 있지만 지나치게 길거나 올바르게 수행하기가 어렵습니다 (유지 관리가 현명한 경우).

다시 출력하십시오 - DRY. 어떤 MVC 프레임 워크를 사용하고 있으며 이미 좋은 솔루션이 있는지에 따라 다릅니다. 그렇지 않다면, 당신은 그것을위한 클래스를 만들 수 있습니다 (예, 저는 미치광이입니다). 응답 코드와 배열 (또는 문자열)을 응답으로 전달하고 모든 것을 JSON, XML 형식으로 멋지게 래핑합니다. 장점 : 출력 형식을 변경하면 한 곳에서만 변경해야합니다.

Remote Facade 패턴도 사용하는 것이 좋습니다.

바라기를, 당신은이 포스트에서 유용한 것을 찾아 냈습니다.

+0

답장을 보내 주셔서 감사합니다.나는 codeigniter를 사용하고 있습니다. 그래서 모든 사례를 사용자 정의 유효성 검사 클래스에 집어 넣었습니다. 모든 것을 지키고 컨트롤러와 모델을 깨끗하게 유지합니다. – Rob

1

나는 MVC 응용 프로그램에서 API를 분리하고 방금 같은 코드/모델을 넣어 간단하기 때문에 (컨트롤러에서 그것을 가진 것이 완벽하게 잘하지만) Apify