서비스/datamapper/domain 객체 트리오를 사용할 때 내 페이지 매김이 올바른 위치로 간주되는 것은 무엇입니까?데이터 마커, 서비스 및 도메인 객체 트리오를 사용할 때 페이지 매김은 어디에서 생깁니 까
예 :
- 는
- 결과를 페이지 매김 몇 주어진 기준 포트를 가져 오기
- 알고 우리에 어떤 페이지, 총 페이지 수,보기의 결과 등의 수 클래스
아래는 지금 여기에서 작성한 내용이지만 내 응용 프로그램과 유사합니다.
class PostController extends Controller
{
function viewPosts()
{
return $this->serviceFactory
->build('post')
->getPosts($aCriteria, $this->request->_get('page'), 10);
}
}
현재 각 서비스에서 페이지 매김 매개 변수를 계산하고 저장하고 있습니다. 내 컨트롤러에서 뷰에 어떤 데이터도 넣지는 않습니다.
class PostService extends AbstractService
{
public $posts;
public $iTotalPages; // This does not belong here does it?
function getPosts($aCriteria, $iPage, $iItemsPerPage)
{
$mapper = $this->dataMapperFactory->build('post');
// I do not know where to put the below
// (The parameters and the code itself)
$iCount = $mapper->count($aCriteria);
$iOffset = $iItemsPerPage * $iPage;
$this->iTotalPages = $iCount/$iItemsPerPage;
$this->posts = $mapper->find($aCriteria, $iOffset, $iOffset + $iItemsPerPage);
return $this->posts;
}
}
내보기는 내가보기에서 $service->iTotalPages
부를 수있는, 내 컨트롤러와 모델 층의 동일한 인스턴스에 액세스 할 수 있지만 잘못 느낀다.
class PostsView extends AbstractView
{
function viewPosts()
{
$service = $this->serviceFactory->build('post');
if(count($service->posts)>0) {
$this->template->assign_var('TOTAL_PAGES', $service->iTotalPages);
$this->template->assign_vars('POSTS', $service->posts);
}
}
}
솔루션?
1) 페이지 매김을위한 서비스를 만들고 필요에 따라 컨트롤러가 포스트 서비스와 데이터를 교환하게합니까?
2) 각 서비스에 포함 할 수있는 페이지 매김을위한 도우미 클래스를 만드시겠습니까? (그런 클래스는 어떻게 생겼을까요?)
3) AbstractService에 일반 페이지 매김을 추가 하시겠습니까?
4) 내 Repos에 일종의 페이지 매김 지원을 추가 하시겠습니까?
데이터베이스 수준에서 페이지 매김이 필요한 경우 기준 및 페이지 매김을 읽기 리포지토리에 추가 할 수 있습니다. 개인적으로, 필자는 제일 처음에 max를 finder의 매개 변수로 사용하는 것을 선호한다. (나는 좀 더 일반적인 것으로 생각한다.) 전체 페이지, 현재 페이지 (대개 ui 용어)를 컨트롤러로 변환한다. – Hippoom