Posted on 2005-11-19 11:01
canonical 閱讀(345)
評(píng)論(0) 編輯 收藏 所屬分類:
Witrix開發(fā)平臺(tái)
數(shù)據(jù)導(dǎo)出的功能大致可以分解為三個(gè)部分: 1. 從數(shù)據(jù)源讀取一條記錄 2. 將一條記錄導(dǎo)出為指定格式 3. 循環(huán)調(diào)用1和2
首
先我們需要一種機(jī)制來對(duì)外暴露數(shù)據(jù)源(一種Container)中的數(shù)據(jù),Iterator模式恰能滿足要求。其次,我們需要一種機(jī)制來對(duì)一系列數(shù)據(jù)進(jìn)行
處理,這對(duì)應(yīng)于Visitor模式。第三,在組合Iterator模式和Visitor模式的處理過程中,我們需要表達(dá)出平面表數(shù)據(jù)集的基本特征。
在witrix平臺(tái)中,平面表數(shù)據(jù)導(dǎo)出和轉(zhuǎn)換通過TablePageProcessor對(duì)象來完成,
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是暴露平面表數(shù)據(jù)的標(biāo)準(zhǔn)接口,它通過Pager對(duì)象的包裝之后可以提供各種Iterator.
ITableVisitor體現(xiàn)了平面表數(shù)據(jù)的基本特征: header + 一系列row, 存在數(shù)據(jù)邊界(起始與終止)
TablePageProcessor固化了IPageViewer和ITableVisitor的組合過程。
ITableVisitor可以有多種實(shí)現(xiàn),例如CSVBuilder, ExcelBuilder等等。