포럼
모듈 제작 중 MVC 패턴에 대한 의문...
2015.04.07 12:30
저번에 프로젝트 관련 게시물을 올렸던 학생입니다.
일단 조언을 해주신 시니시즘님과 GG님께 감사의 말씀 드립니다.
두분께서 이야기 해주신 사항을 적극 반영하여 모듈이 어느정도 구현이 되었습니다.
제가 제작하려는 모듈은 기존의 모듈에 있는 함수를 호출하여
결과를 (앱과 통신이 가능한) JSON으로 반환해주는 모듈입니다.
그런데 의문점이 하나 있습니다.
XE의 모듈들은 모두 MVC 패턴을 따르는 걸로 알고있는데, MVC 패턴에 대해 조사를 해보니
Model, View, Controller로 나누어 모듈이 가지고 있는 정보를 가공한다고 하더군요.
예를들면 Document 모듈같은 경우
Model에는 게시물의 각종 정보를 얻어오는 함수가, View에는 게시물 목록을 출력하는 함수가,
Controller에는 게시물을 추가/수정/삭제하는 함수가 들어있었습니다.
그런데 제가 제작하려는 모듈은 모듈 자체에 있는 정보를 가공하려는 것이 아니라
기존에 MVC 패턴으로 제작된 모듈의 Model, View, Controller에 있는 함수들을 호출하고 이 결과를
JSON으로 반환하는 역할만 수행하도록 하려고 합니다.
단순히 함수를 호출하여 JSON으로 반환하는 모듈같은 경우에도 MVC 패턴을 지켜서 제작할 수 있을까요?
댓글 6
-
기진곰
2015.04.07 13:10
-
푸른쉼터
2015.04.07 13:18
그렇다면 메뉴 목록을 불러오거나 게시판 내 게시물 목록, 게시물 내 코멘트 목록 등을 불러오는건 View에,
게시물/댓글 쓰기/수정/삭제 등은 Controller에, 자주 쓰이는 함수들은 Model에 넣으면 문제 없는건가요?
-
기진곰
2015.04.07 14:33
네, 그렇게 해보세요. 그러나 살짝 틀리더라도 딱히 "문제"가 생기지는 않으니까 너무 걱정하지 마세요. 어떤 종류의 코드는 어디에 넣는다는 관례가 있을 뿐인데, 일반적인 웹페이지를 출력하지 않을 경우 그 관례조차도 정확하게 들어맞진 않으니까... 나름대로 원칙을 세워서 충실하게 따르시면 그만입니다.
-
푸른쉼터
2015.04.07 15:24
알려주셔서 감사합니다. 한번 해보겠습니다 ^^
-
GG
2015.04.07 15:11
$oModuleModel = getModel('모듈명');
$output = $oModuleModel->모델함수;
debugPrint($output);
이런식으로도 되고...
$args->쿼리인자 = '값';
$output = executeQueryArray('모듈명,쿼리명',$args);
debugPrint($output);
뭐.. 요래 해도 되구요..
막 스킨에다 때려 박아도 되고 맘대로 하시면 됩니다.
-
푸른쉼터
2015.04.07 15:30
특정 게시물의 댓글 목록을 불러오는 함수의 경우
Context::setRequestMethod('JSON'); // 요청을 JSON 형태로
Context::setResponseMethod('JSON'); // 응답을 JSON 형태로$document_srl = Context::get('document_srl'); // document_srl 값을 POST로 읽어들임
$page = Context::get('page'); // page 값을 POST로 읽어들임
$list_count = "20"; // 페이지당 20개씩 출력...
$oCommentModel = getModel('comment'); // comment 모델 얻어오기
$oCommentList = $oCommentModel->getCommentList($document_srl, $page, false, $list_count); // 댓글 목록 얻어오기
...
$this->add('results', $oCommentList->data); // JSON에 key를 'results'로, data를 댓글 목록으로 하여 추가
이런 방식으로 구현을 해보았습니다.
이미 있는 정보를 가공하여 반환하기만 하는 요청은 View에 넣으세요.
데이터의 추가/수정/삭제가 일어나는 요청은 Controller에 넣으세요.
만약 이런 종류의 요청이 없다면 Controller는 필요가 없겠죠.
정보 가공 과정에서 여러 군데에서 공통으로 사용하는 루틴이 있다면
중복을 피하기 위해 Model에 넣고, View와 Controller에서 필요에 따라 호출하면 됩니다.
아니면 MVC 구조와 별도로 api 클래스를 별도로 만들어 사용하셔도 됩니다.
member 모듈, board 모듈처럼 api 클래스를 별도로 갖추고 있는 모델을 참고하세요.
간단한 작업이라면 오히려 이게 제일 편해요.