2010-12-27 5 views
7

IterableIteratorList이 있습니다. 결과를 "페이지"로 반환하는 원격 서비스가 제공하는 기능을 캡슐화하기 위해 다른 Java 코드에 대한 인터페이스를 제공하려는 경우 무엇을 사용합니까?java : 페이징 결과에 대한 디자인 패턴

예를 들어, 데이터베이스 또는 웹 페이지 (예 : flickr API)를 고려해보십시오. 결과를 처음으로 검색 한 후에는 전체 결과 수 및 첫 번째 N 결과를 알 수 있지만 나머지를 검색 할 때까지 나머지 결과를 알 수 없습니다.

답변

0

나는 next()의 반복자의 구현 결과의 다음 페이지를 다운로드하는 것입니다 Iterator<ListPage>을 구현하기로 결정하고, ListPage 실제 목록과 페이지 당 총 결과 #, # 같은 메타 데이터를 반환 방법이있다 페이지 번호 및 총 페이지 수 :

public interface ListPage<T> { 
    public List<T> getList(); 
    public int getTotal(); 
    public int getPage(); 
    public int getPages(); 
    public int getPerPage(); 
} 
4

각 요소를 검색하는 데 비용이 많이 든다는 점을 감안할 때 집계 결과를 가져오고 제거 호출 수준에서 각 요소에 대해 직접 반복하지 않는 것이 좋습니다. 오프셋

List<YourClass> getResults(int offset, int maxResults) 

당신과에서 maxResults에서 시작 할 첫 번째 요소의 인덱스가 될 것입니다 당신이 원하는 요소의 최대 수입니다 :

이 같은 목록을 반환 하나의 방법을 제공 할 수 목록에. 그런 다음 목록에서 반복하여 페이지에 표시 할 수 있습니다.

setFirstResult() 
setMaxResults() 
List getResultList() 

http://download.oracle.com/javaee/5/api/javax/persistence/Query.html

2

내가 Iterator 인터페이스를 계속 준수 것이며, 소개하지 않을 :

자바 퍼시스턴스 API도 같은 패턴을 따른다

는 쿼리 인터페이스는 위의 할 3 가지 방법을 제공 새로운 방법 (위에 제안 된대로). 대신 hasElements(), nextElement() 및 클래스 getters에 lazy loading을 사용합니다. 내 응용 프로그램에서