CI 묻고 답하기

제목 [도움요청] mvc 중 model 사용 방법에 대한 개념
글쓴이 내안의다른삶 작성시각 2014/10/01 11:29:37
댓글 : 12 추천 : 0 스크랩 : 0 조회수 : 17428   RSS
안녕하세요. 반갑습니다. 
첫인사를 이렇게 질문 글로 드리게되어 송구합니다. ㅎ; 

mvc를 활용하여 개발을 처음 해보려고 하니
view 와 controller 에 대한 사용 방법은 어느정도 구분이되는것 같습니다. 
( 그렇지만 검증 받아보지 않아서 막상 엄하게 사용하고 있을 수도 있겠다 싶습니다. ; )

질문 . model 에 어떤 내용이 들어가야 하는지 모르겠습니다. 
예 ) controller :
$this->db->select('a,b,c,d')
$this->db->where('a', 'test');
$this->model->gets("table");

model : 
function gets($table){
    $result = $this->db->get($table;
    return $result->result_array();
}

위와 같이 사용하는게 맞는건지 아니면 
select 나 join 이나 where 문구나 db에 관련된 모든 내용이 
model 안에 있고 컨트롤러에는 상황에 맞는 model 안의 함수만 호출해서 사용해야하는건가요 ? 

읽어주신 모든 분들 오늘 좋은 하루되세요 ^^ 
 다음글 redirect 시 Error 발생 (2)
 이전글 코드를 작성할떄 function만 아니면 public ... (7)

댓글

들국화 / 2014/10/01 12:11:37 / 추천 0
MVC 패턴 그림을 보는게 빠를듯 하네요.

http://pds11.egloos.com/pds/200904/28/53/c0004553_49f650ab9e3cb.jpg
한대승(불의회상) / 2014/10/01 12:51:50 / 추천 0
CI가 느슨한 MVC라 모두 무시하고 컨트롤러에 코딩해서 사용하시는 분도 있습니다.

하지만 모델의 코드의 경우 여러 컨트롤러에서 사용하는 경우가 많기때문에 재사용성이 좋아집니다.
MVC가 패턴으로 자리잡은데는 다 이유가 있는거죠.
최대한 MVC 패턴에 맞추어 코딩하는 습관을 들이세요.
 
람이 / 2014/10/01 14:03:16 / 추천 0
컨트롤러에서는 폼검증이라든가, 조건처리, 변수처리등을 하고 있구요.
모델에서는 위에 컨트롤러에 넣어 사용하시는 디비 쿼리들을 ..
뷰단에서는 오직 뷰 처리만 하고 있습니다.
내안의다른삶 / 2014/10/01 14:23:26 / 추천 0
들국화님, 한대승님, 람이님
답변 감사합니다. 

알고 싶었던 부분에 대해서 도움이 되었습니다. 

그렇다면 궁금한게 위의 예에서
<span neue,helvetica,arial,sans-serif"="">$this->db->select('a,b,c,d')
$this->db->where('a', 'test');
이런 코드들이 모델쪽에 들어간다면 
셀렉트나 조건문, 조인등에 필요한 내용들을
변수처리해서 컨트롤러에서 전달받아 사용하는 방식으로 사용하는건가요? 

아니면 모델안에 코딩해서 사용하는건가요 ? 
재사용성을 어느정도 까지 고려해서 코딩해야하는지 어렵네요 ㅠ.ㅠ 

 
한대승(불의회상) / 2014/10/01 14:57:09 / 추천 0
어렵지 않습니다.

Controller:
$this->model->gets('aaa', array('a' => 'test'));
Model:
function gets($table, $where = array()){
  $this->db->select('a,b,c,d');
    if(!empty($where)) {
      $this->db->where($where);
    }
  $result = $this->db->get($table);
  return $result->result_array();
}
내안의다른삶 / 2014/10/01 15:05:40 / 추천 0
한대승님 답변 감사합니다. 

궁금했던 내용은 안에 셀렉트 되는 a,b,c,d 도 where 처럼 배열로 전달받아서
코딩을 해야 하는지 궁금했습니다. 

그런데 위에 예제로 들어주신 것 같이하면 셀렉트되는 열값이 함수안에 정해져 있기때문에 
다른 테이블명을 전달해봤자 오류만날 것 같아서 그냥 함수자체를 aaa_gets 이런식으로 하고 
$result<span 248,="" 248);="" color:rgb(0,="" 0,="" 0);="" font-family:consolas,monaco,bitstream="" vera="" sans="" mono,courier="" new,courier,monospace"=""> = $this->db->get('aaa'); 
이렇게 코딩해서 사용하는건 좋은 방법이 아닐까요?
 
변종원(웅파) / 2014/10/01 15:21:13 / 추천 0
내안의다른삶/ 만들기 나름입니다. 
공용함수처럼 공용모델을 만든다면 select할 필드, table name, where, order by, group by 등등을 파라미터로 넘겨서
처리할 수 있고 특정 데이터만 가져오는 것이라면 where절 정도만 넘겨서 처리합니다.
파라미터를 넘기고 안넘기고 보다는 모델의 형태에 따라 달라진다고 보시면 됩니다.
한대승(불의회상) / 2014/10/01 15:24:28 / 추천 0
내안의 다른삶// 좋은 방법이 아니라고 생각합니다.
재사용의 의미를 잘 생각해 보세요.

A라는 모델의 B라는 메소드를 호출하는데 의도치 않은 외부의 코드로 인해 결과가 달라진다면 어떻게 될까요?

모델을 사용하지 않고 컨트롤러에서 모든걸 처리 하는게 더 나을지도 모릅니다.
내안의다른삶 / 2014/10/01 15:34:41 / 추천 0
변종원님, 한대승님 답변 감사합니다. 
어렵네요.
답변대로라면 공용함수처럼 모든걸 다 파라미터로 받아서 처리하게 모델을 구현할때도 있고
위의 한대승님 답변처럼 고정된 셀렉트 값을 가진 모델 함수를 구현할때도 있다는건데 
역시 판단은 개발자가 하는 것이겠지요... ;; 
들국화 / 2014/10/01 15:42:03 / 추천 0
개발할때 이렇케 하니 더 편하고 유용하더라고 하는 수많은 패턴들이 있는것 같구요.
정답은 없는것 같구요.
잘만들어진 좋은코드들 많이 보시면 도움이 될듯 하네요.
내안의다른삶 / 2014/10/01 15:56:59 / 추천 0
들국화님 답변 감사합니다. 
안그래도 지금 구글에서 mvc 패턴이 적용된 간단한 게시판 소스를 찾아보고 있습니다. ㅎㅎ

답변 주신 모든분들 다시 한번 감사합니다. ^^
일용직노동자 / 2014/10/03 03:20:58 / 추천 0
ci korea포럼 소스 공개되어있습니다.
포럼소스 참고하시면 많은 도움될거에요 ㅎㅎ