提供自由报表导入的详细思路
关于自由报表导入技术方案细化
概述
继《关于自由报表导入技术方案概述》文档的分析之后,我们认为有必要对基于各种报表模板形成的基础数据表到实体对象 VO 转换的过程做具体的细化,落实到具体规范、约束以及技术细节。比如:VO 的结构、各模板的配置文件 *.config 的格式、工厂模式的考虑以及扩展性等。
后台设计
目标
系统将用户上传的基于1104某个模板(主要是G01,G21,G22,G2501,G2502,G33)形成的基础数据表统一转换成我们需要的 VO。
模式设计
我们首先考虑的是采用工厂模式,但是这样就限制了生产出来的 VO 结构,即:一个工厂生产一种产品。由于 1104 报表模板众多以及后面 MPA 的模板,所以考虑进一步将工厂抽象化,形成抽象工厂模式。这样就可以完整兼容各种不同模板的数据导入了。如下图所示:
这里,我特别地将符合 G2501 和 G2502 两类报表形式的模板对应的 Excel 数据报表统称为标准原材料,对应的工厂为标准工厂,对应的产品为标准产品,而从原材料到产品的加工过程由标准工厂对应的机器进行加工处理。此时,我们的抽象工厂模式就退化形成生产标准产品的工厂模式。如下图所示:
针对标准工厂,我们形成的主体类有:
标准工厂类图:
整个抽象工厂的类图:
扩展性考虑
配置文件中配置参数的可覆盖性,配置文件分为“三类两套”,即:content.properties、factory.properties、*.config三类,src/main/java类路径下与src/main/resourcees资源路径下各一套,如下图:
其中:
*.properties 文件中的参数配置以 src/main/resources 的为主,即:src/main/resources 的参数优先级较高,会覆盖 src/main/java 对应的参数,如:src/main/resources 某个参数配置 A=1,src/main/java 对应的参数配置 A=2,那么最终 A 的配置值为 1;
*.config 文件的配置则会完整的以 src/main/resources 下面的为主,即:如果 src/main/resources 存在 G01.config,src/main/java 也存在 G01.config,那么最终会完整采用 src/main/resources 的 G01.config;
生产其它形式的产品,只要在抽象工厂类中增加生产其它形式产品的工厂方法,新建实际工厂类实现抽象工厂类即可,但要注意符合工厂模式的开发方法,如下图:
配置文件
content.properties 文件
普通的 key-value 结构配置,如下图:
其中,key是模板ID,value是模板名。
factory.properties 文件
普通的 key-value 结构配置,如下图:
其中,key 是对应的工厂全类名,value 是以英文逗号分隔的每个模板 ID,意味着配置的工厂能处理的模板。
*.config 文件
自定义的一种配置文件结构,一行代表一个配置,配置形式满足 key:value,只能单行注释,用 // 或者 # ,有对应的解析器 Config.Parser,文件内容如下图:
其中,左边的是 G2501.config,右边的是 G2502.config,内容解析如下:
VO对象
StandardProduct类,直接参考目标表建立,结构如下图:
IProduct接口,参考模板表建立的产品属性规范,结构如下图:
附加事项
根据以上分析,有以下三点需要后期开发时注意:
(1) 非标准产品需要新增工厂,扩展抽象工厂的实现,具体可参考标准工厂;
(2) VO数据的清洗、转换与校验,可以在两个过程做:Excel -> VO, VO -> PO;
(3) PO的具体结构,需要符合所有的模板表以及数据库指标数据表;
完整类图