우리의 현재 ORM 솔루션은 데이터 맵퍼를 사용하여 데이터베이스의 테이블/뷰를 표현한 다음 검색된 레코드를 모델 객체로 반복하는 데 사용할 수있는 Collection 객체를 반환합니다. 데이터 매퍼와 모델 레이어 사이에는 데이터 맵퍼에 대한 도메인 요청을 처리하고 해당 컬렉션 또는 도메인 객체를 반환하는 저장소 레이어가 있습니다.클래스 메서드의 올바른 사용법을 올바르게 적용하는 방법?
우리는 현재 리포지토리 및 데이터 매퍼 계층의 책임을 리팩터링하여 데이터 매퍼 계층에 대한 모든 응용 프로그램 요청이 리포지토리를 통해 라우팅되고 데이터 매핑자가 검색된 데이터 행을 리포지토리로 반환 한 다음 리포지토리를 반환합니다. 요청 객체에 대한 필요한 콜렉션.
궁금한 점은 전체 Repository 객체를 해당 Data Mapper로 전달하여 Repository 레이어를 통해서만 Data Mappers에 액세스 할 수 있는지 여부입니다. 나는이 같은 일을 생각
class DataMapper {
public function findAll(Criteria $criteria)
{
$select = $criteria->getSelect();
// Build specific select statement
$rows = $this->_fetchAll($select);
return new Collection(array('data' => $rows, 'mapper' => get_class($this)));
}
}
:이 버전에서 다음
class Repository {
public function findAllByName(Model $model)
{
$this->_criteria->addCondition('name LIKE ?', $model->name);
$rows = $this->_mapper->findAll($this);
return new Collection(array('data' => $rows, 'repository' => get_class($this)));
}
}
class DataMapper {
public function findAll(Repository $repository)
{
$select = $repository->getCriteria()->getSelect();
// Build specific select statement
$rows = $this->_fetchAll($select);
return $rows;
}
}
와, 컬렉션 객체가 호출을 발행 할 지금 어떻게 작동하는지
는 예를 들어이 기본적으로 캐시 된 객체를 먼저 검색 한 다음 데이터베이스에 대한 호출 만 실행하여 필요할 경우 레코드를로드 할 수있는 저장소에 저장합니다.