CodeIgniter로 사이트를 만들고 있는데 Blog_model
이라는 모델이 있습니다.OOP, MVC - 모델 및 객체
Blog_model
에는 특정 주제에 대한 게시물 목록을 가져 오는 방법이 있습니다 (예 : getPopularPosts()
).
getPopularPosts()
은 지정된 테이블과 일치하는 topic_id
의 게시물 목록에 대해 게시물 테이블을 쿼리하고 인기순으로 정렬합니다. 따라서 전체 게시물 테이블에 대한 쿼리는 topic_id
x 인 모든 게시물을 찾기 위해 결국에는 매우 커질 것이라고 가정 해 봅시다.
그런 다음 foreach
결과가 as
as
개 개인 게시 ID이면 새 Post
개체가 생성됩니다. Post
클래스는 id
필드를 설정하여 게시물을 구성합니다.
Post
의 내용을 반환하려면 의 전체 행을 반환하기 위해 posts 테이블을 다시 쿼리하는 $post->getPost();
을 할당합니다.
이 조직 (AFAIK)은 훌륭한 객체 지향 원칙을 따릅니다. 하지만 이제는 모든 게시물에 대해 (다시 말하자면, 수천, 수백만, 무엇이든간에 ...), 먼저 id
의 목록을 쿼리 한 다음 각 게시물의 내용을 다시 얻어야합니다. 30 개의 게시물을 반환한다면 31 개의 별도 쿼리를 의미합니다.
달리, I는 객체 지향 패턴을 깨고 posts
topic_id
= X 각 게시물 *
당겨 있었다. 그런 다음 30 개의 게시물을 모두 반환하는 쿼리가 하나 있지만 객체 지향적이지 않습니다.
어떻게해야합니까?
"개체 지향적 인 느낌"이 중요하다고 생각합니까? - 성능이나 무언가에 대해 걱정이된다면 백엔드에서 변경 사항을 완벽하게 수행하여 결과를 일반 텍스트 파일에 기록 할 수 있습니다. 그런 다음 각 게시물에 대해 쿼리를 실행하지 않아도됩니다. 초기 쿼리의 ID를 사용하여 캐시 된 파일의 결과를 표시 할 수 있습니다. 그러나 언급 한 옵션 중 하나를 선택하는 주석을 찾고 있다면 조인 된 쿼리로 갈 것입니다. 코드 점화 장치는 실수가 아니라면 엄격하게 oo가 아닙니다. Kohana 나는 생각합니다. 그리고 그들은 당신이 원하는 것을하기 위해 ORM을 가지고 있습니다. –
차이가 있다면 CodeIgniter 2입니다. – Peter
질문에 많은 정보가 있습니다. 여기에서 제대로 설명하기를 원한다면 코드에 대한 구체적인 예를 들어주십시오. – jondavidjohn