CI 묻고 답하기

제목 MVC패턴의 컨트롤과 뷰
글쓴이 지침 작성시각 2016/08/10 00:08:29
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 18343   RSS

현재 MVC패턴에 맞게 코딩을 하려고 노력을 하고있습니다.

그런데 한가지 궁금한 점이 생겼습니다.

모델에서 데이터베이스의 값들을 받아와 컨트롤을 통해 뷰를 보여줍니다.

이때 뷰에서 여러가지 조건들이 나오게되는데요. 현재 제가 코딩하는 방법은 

예로들어

뷰에서 특정날짜의 값을 보여줍니다.

여기서 state값이 1이라면 특정날짜가 보이도록하고, 0이라면 특정날짜가 '---' 이런식으로 조건이 있다고 가정을 합니다.

<tr>
     <th>날짜</th>
     <td><?= element('state', $order) == 0 ? '---' : date("Y/m/d H:i",element('time', $order))?></td>
</tr>

조건이 있다면 뷰에서 이런 느낌으로 코딩을하고있습니다.

여기서 문제점이 위의 코드에선 조건이 하나이고, 간단하기때문에 뷰에서 조건을 주고 처리를해도 무관하다고 생각합니다.

하지만 하나가 아닌, 여러개의 조건들이 생겨나게 된다면 상당히 뷰의 소스부분이 더러워지고, 유지보수또한 어려워진다고 생각하고 있습니다.

 

그래서 뷰에서의 처리가 아닌 컨트롤러에서 처리해야한다고 맞다고 생각하는데, 현재 제가 생각하는 방법은 

controllers

function find(){
   $ret = $this->model->get();
   $ret['state'] == 0 ? $ret['state'] = '---' : '';  
   $this->load->view('view',$ret);

}

이런방식으로 코딩을 한다고 생각한다면,  데이터값이 여러개인 리스트를 불러오는 부분이라면, 포문을 돌려 체크를하고

다시 $ret배열에 덮어 써야 된다거나 그런 작업이 필요하겠지만, 그나마 컨트롤러 부분에서 조작을 하기때문에 괜찮을거 같다라는 생각을 하고있습니다.

하지만, 뭔가 이게 아닌거 같은 찜찜한 생각에 섣불리, 시도를 하지 않고 있습니다. 

 

어떤방법이 가독성있고 MVC패턴에 준수하는 방법인지 가늠이 잡히질않네요. 알려주시면 감사하겠습니다.

 다음글 같은 CI내에서 여러개 숫자주소 관련 질문드립니다~ (6)
 이전글 페이징 구현(게시판) (1)

댓글

이현재 / 2016/08/10 08:42:06 / 추천 0
저는 데이터 변환 시 모델에서 처리합니다. 다른 페이지에서 또 쓰일 것이 아니라면 해당 뷰만을 위해 데이터 가공을 하고, 유사하게 다른 곳에서 쓰인다면 단위를 쪼개서 관리하죠. 일시를 일자로 쪼갠다는 것 같은 절삭 부분은 뷰에서 처리합니다.
kaido / 2016/08/10 08:51:07 / 추천 0

가급적 컨트롤러에서 처리하고 뷰에서는 오직 프린트만 한다는 개념이 맞긴 합니다.

다만 이건 정해진 방법이 없습니다. 

 

저같은 경우에는 가장 중요하게 보는것을 오히려 모델이라고 생각 하기 때문에

모델의 데이터는 가급적 클린 해야합니다. [가공되지 않은 순수 데이터]

날짜 같은 경우는 사실 표현하는 페이지의 뷰 마다 다를 수 있기 때문에 뷰에서 처리 하는 편입니다.

지침 / 2016/08/10 09:25:47 / 추천 0

러즈,kaido// 답변감사합니다.

모델에서 데이터가공은 다른 곳에서 사용하지 못하기 때문에 왠만하면 순수데이터만 유지하려고 노력하고있습니다.

날짜같은 간단한 처리기 때문에 뷰에서 가공을하고, 복잡한 조건이나 가공을해야하는 데이터라면 컨트롤에서 데이터가공을 하는게 

좋다라는거군요.

 

쌈닭 / 2016/08/10 10:52:56 / 추천 0

@지침

MVC 개념 떠나서 데이터 값을 제어하고 싶을 때

custom_result_object() 나 custome_row_object()를 사용하셔도 괜찮을 것 같습니다.

https://codeigniter.com/user_guide/database/results.html#custom-result-objects

이현재 / 2016/08/10 10:56:21 / 추천 0
제가 모델에서 처리한다는건 디비에서 데이터를 가져오는 곳에서 처리하는 것이 아니라 별도의 모델로 관리한다는 의미였습니다. 컨트롤러는 최대한 가벼운게 개인적으로 가독성이 높다고 여기기 때문입니다. 짧게 쓰다보니 오해가 생길 수도 있다는 생각이 댓글 보고 들어 추가 댓글 답니다.
지침 / 2016/08/10 11:25:25 / 추천 0

쌈닭 //

이런 레퍼런스가 있었군요. 좋은정보 감사합니다. 한번 응용해서 사용해봐야겠네요.

러즈 //

제가 이해를 잘못한듯합니다. 죄송합니다. 별도로 모델에서 관리하는게 좋다는 거군요.

무슨느낌인지 감이 잡히는 것 같습니다. 감사합니다 ^^