文章内容
- 相关类分析
- Lambda聚合实现
- 数据源聚合实现(JDBC)
- 总结
前段时间在使用Cboard,一致觉得这个框架的DateProvider的实现是核心的内容(其他的就一般般咯……哈哈),所以,最近花了点时间研究了DataProvider的实现,这里只能简单的分析一下它的实现,可以给大家在开发过程中提供一种思路。
1.相关类分析
和DataProvider相关的类主要分为四类:
Config类:描述维度列和指标列的定义(DTO);
Result类:描述数据结果;
Aggregatable类:聚合实现接口定义和基于Java8特性实现的数据聚合;
DataProvider类:DataProvider抽象类及其具体实现:
1.1.Config类
主要关注以下三个类:
DimensionConfig: 维度定义列,包括列名,过滤条件(类型,值),重命名;
ValueConfig: 指标列定义,包括列名和聚合运算类型;
AggConfig: 一个图表对应的数据集描述,包括行,列,指标列,过滤条件;
这些类的实现和数据查询时提交的JSON对象存在对应关系,通过修改JSON的字段值可以自定义查询条件,这些Config类相当于是告诉DataProvider你所需要的数据以及你数据的格式;
1.2.Result类
Result类的实现相对简单,只是对结果的描述,为了通用所有数据源,结果的形式为ColumnIndex(列定义)和String[][]二维数据;
我觉得关于数据的维度这一点可以考虑需不需要在增加;
1.3.Aggregatable类
我觉得这个部分的实现是整个框架最精彩的部分,虽然存在一定的限制,但是Lambda表达式很好的运用
除了通用接口的定义,我们主要关注以下:
Aggregatable接口:不管是直接通过数据源完成聚合还是lambda表达式,都需要实现Aggregatable接口,主要有以下这些方法:
queryAggData: 获取聚合后的数据集;
queryDimVals: 获取某一纬度过滤后的值;
viewAggDataQuery: 查看查询(比如加了聚合列之后的SQL)
separateNull: 对null值得处理,有默认实现;
AggregateCollector类: 实现Collector接口(我们经常使用的是Collectors),定义聚合规则;