我試圖對API返回結果分頁格式的服務調用,並希望對此迭代器的設計模式的建議。與Java分頁迭代器的設計模式
什麼我到現在爲止是這樣的
public class CustomIterator implements Iterator<Type> {
private List<Result> results;
private Service service;
private int index;
private int paginatedResultSize;
private int totalResultsSize;
public CustomIterator(Service service) {
this.service = service;
this.index = 0;
this.results = getResults(index);
this.totalResultsSize = this.results.totalResultsSize();
}
@Override
public boolean hasNext() {
if (index < totalResultsSize)
return true;
return false;
}
@Override
public Type next() {
if(index == paginatedResultSize) {
getResults(index);
}
return results[index++];
}
private List<Result> getResults(index) throws Exception {
this.results = service.makeServiceCall(index);
this.paginatedResultSize = this.results.size();
return this.results;
}
}
現在,我明白了迭代器的目的通常是爲了只是重複,但我也希望整個分頁封裝到一個單獨的區域,從而我的客戶端類可以在類上調用.next()並獲取所有值,而無需瞭解內部分頁詳細信息。有沒有乾淨的模式來完成這項工作?
有了這個我遇到的第一個問題是服務調用拋出一個檢查異常,next()顯然不是。
我在互聯網上注意到的一些選項是有這個拋出一個RunTimeException,我寧願只做最後的手段,因爲我喜歡檢查服務調用異常。我的直覺是,服務調用應完全在單獨的一個層次上完成,但我不確定迭代器如何與那個分頁一起工作。任何建議/鏈接表示讚賞。
感謝您的反饋oldcurmudgeon。我的確瞭解了使用RunTimeException並不一定是壞事,但我想知道是否有其他設計模式(可能甚至不使用迭代器)封裝了這種行爲,並且還允許我使用服務的檢查異常因爲我希望客戶不必知道異常情況並檢查它們。 – Rahul