Posted on 2005-11-19 11:01
canonical 阅读(337)
评论(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等等。