Posted on 2005-11-19 11:01
canonical 閱讀(345)
評論(0) 編輯 收藏 所屬分類:
Witrix開發平臺
數據導出的功能大致可以分解為三個部分: 1. 從數據源讀取一條記錄 2. 將一條記錄導出為指定格式 3. 循環調用1和2
首
先我們需要一種機制來對外暴露數據源(一種Container)中的數據,Iterator模式恰能滿足要求。其次,我們需要一種機制來對一系列數據進行
處理,這對應于Visitor模式。第三,在組合Iterator模式和Visitor模式的處理過程中,我們需要表達出平面表數據集的基本特征。
在witrix平臺中,平面表數據導出和轉換通過TablePageProcessor對象來完成,
class TablePageProcessor{
IPageViewer viewer;
public Object process(ITableVisitor visitor){
Pager pager = new Pager(viewer, pageSize);
Iterator it = pager.itemIterator();
visitor.visitBegin(headers);
while(it.hasNext()){
Object row = it.next();
if(!visitor.visitRow(row))
break;
}
return visitor.visitEnd();
}
}
interface ITableVisitor{
void visitBegin(List headers);
boolean visitRow(Object row);
Object visitEnd();
}
IPageViewer是暴露平面表數據的標準接口,它通過Pager對象的包裝之后可以提供各種Iterator.
ITableVisitor體現了平面表數據的基本特征: header + 一系列row, 存在數據邊界(起始與終止)
TablePageProcessor固化了IPageViewer和ITableVisitor的組合過程。
ITableVisitor可以有多種實現,例如CSVBuilder, ExcelBuilder等等。