技术开发 频道

数据导出:Visitor模式

【IT168 技术文档】

  数据导出的功能大致可以分解为三个部分:

  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等等。

0
相关文章