2010-11-18 2 views
0

예 :Zend Framework에서 데이터 맵퍼 사용하기

남성 사용자 ID, 이름 및 성을 검색해야하지만 그 밖의 것은 없습니다.

그래서 사용자 엔티티 집합을 반환하는 fetchAllMaleUsers()라는 UserMapper 함수가 있습니다.

즉 :

public function fetchAllMaleUsers() { 
     $select = $this->getDbTable() 
         ->select() 
         ->from($this->getDbTable(), 
           array('ID', 'FirstName', 'LastName')) 
         ->where('Gender = ?', 'M'); 

     $resultSet = $this->getDbTable()->fetchAll($select); 

     $users = array(); 
     foreach ($resultSet as $row) { 
      $user = new Application_Model_User(); 
      $user->setId($row->ID) 
       ->setFirstName($row->FirstName) 
       ->setLastName($row->LastName); 
      $users[] = $user; 
     } 

     return $users; 
    } 
  1. 이 기능은 매퍼 층에 속해 있습니까?
  2. 각 사용자 엔티티의 ID, 이름 및 성만 설정해도 괜찮습니까?

답변

1

1) 매퍼/게이트웨이 또는 전화로는 아무 문제가 없습니다.
2) 당신은 할 수 있습니다. 그러나 저는 이것을 매우 부인합니다. 왜? 나중에 응용 프로그램에서 모델을 얻은 위치를 알 수 없습니다. 따라서 모델이 설정되어 있는지 확실하지 않을 때마다 모델에 값이 설정되어 있는지 또는 누락 된 값 (누락 된 것보다 나쁨)에 대해 자동 로딩이 필요한지 확인해야합니다. 또 다른 이유는 사용자 모델의 다른 속성이 필요한 다른 곳에서이 함수를 다시 사용할 수 없다는 것입니다. afaik의 마지막 이유는 모델이 전체 엔티티를 나타내며 언제나 그 일부가 아니라는 것을 나타냅니다. 그리고 모든 필드를로드하지 않는 이유는 없습니다 (다른 엔티티에 대한 참조 옆에 어쨌든 자동로드가 필요한 이유).

+0

감사합니다. 모든 열을 쿼리하면 DB에 대한 불필요한 계산처럼 보이기 때문에 감사드립니다. 하지만 문제가되지 않을 수도 있습니다. 그래서 언제든지 User 엔터티의 속성을 가져 오려고 할 때 모든 열을 User 엔터티에 매핑해야합니까? – Craig

+1

@Craig : 예. 사람들은 처음에는 잘못된 장소에서 최적화하는 경향이 있습니다. 동일한 db 테이블에서 추가 열을 가져 오는 것은 거의 오버 헤드가 없습니다 (물론 바이너리 데이터를 저장하면 ...). 응용 프로그램을 최적화하려면 zend 프레임 워크와 PHP 코드를 사용하는 것이 좋습니다 (일반적으로 더 복잡한 db- 쿼리 또는 db- 레이아웃). 모드/매퍼에 대한 아이디어를 얻는 좋은 출발점은 http://www.survivethedeepend.com/zendframeworkbook/en/1.0과 http://weierophinney.net/matthew/archives/입니다. 202-Model-Infrastructure.html – Fge

0

Fge의 응답과 함께 나는 $ resultSet이 이미 Application_Model_User 유형의 값을 반환하고 있다고 믿습니다. 그렇지 않은 경우 Application_Model_DbTable_User에 $ _rowClass를 설정해야 할 수 있습니다.

+0

흠, 젠드 프레임 워크의 퀵 스타트를 벗어나서 Application_Model_GuestbookMapper의 fetchAll() 아래에서 새로운 result_Model_Guestbook에 값을 매핑하는 $ resultSet을 반복합니다. 이 방법이 모범 사례가 아니며 ZF의 매퍼 및 도메인 계층에 대한 자세한 리소스가 있습니까? – Craig

+0

Fge가 게시 한 링크는 매퍼 부분을 포함해야합니다. 내가 말한 것은 사용 된 가져 오기 메커니즘에 따라 모델이 채워진 모델 객체를 자동으로 생성한다는 것입니다. –

+0

100 % 확신 할 수는 없지만 클래스를 $ _rowClass로 사용하려면 Zend_Db_Table_Row_Abstract를 확장해야한다고 생각합니까? 이것은 모델이 데이터 매퍼 패턴이 피하려고하는 기본 DB 스키마에 대한 지식을 얻는다는 것을 의미합니다. 물론 모델 객체를 생성하기 위해 결과 세트를 반복하는 것에 대해 저울질해야합니다 ... –

관련 문제