最近接了个绩效系统的建设项目。经过初步的调研和系统分析后,发现这个系统有两个特点:1、关于绩效如何计算的算法不是很固定;2、如果算法变了,那么对应的报表也会对应有变化。对于算法和报表这两块,常见的方式就是去用程序编码去实现。用代码写怎么算,再用代码去画报表,在 B/S 系统中的报表要画供查看的 Web 页面,还得画个供导出 Excel 文件的。那么在前面提到的两个难点就会导致这个项目要经常的去改代码,改完要测试,测试完要发版本,发完版本要升级,升级前要评估影响范围和风险,评估后准备升级,升级前必然要备份,也许升级前还要预演,升级完生产环境再复测一遍,万一有问题要进行回退。虽然这是再正常不过的基本流程了,但,想想都让人心碎……
为了想让这个系统更容易维护,能及时响应业务上变化,必然要把算法和报表中两块从硬编码中拿出来。找到替代硬编码的实现方式。最开始的时候打算用规则引擎去实现算法这层,初步选了 Drools 作为算法这层。但,在预研阶段发现规则引擎中的算法是可以灵活的动态配置,但规则中的计算项的输入是固定的。曾想过把某个输入项作为个代号集合,把一些代号输入进规则引擎,规则引擎先把代号转换为业务值,在规则文件里面去把这些业务值通过算法计算后输出。这一进一出都要操作数据库,还有那些代号的管理和转换为业务值的处理过程这些操作也是很复杂的。既然这样的话,用规则去处理感觉还是有些不适合。数据的读取写入,处理,计算,这不得不让我想到了 ETL ,那么 ETL 工具是否可以处理这层的要做的事呢。简单的想想应该差不多,那么就找个 ETL 工具试试吧。
之前有过系统数据库迁移的经历,那个使用用的是 Kettle 这个工具。Kettle 现在是 Pentaho 系列产品的的一个组件,叫做 Pentaho Data Integration (PDI) 。这个资料比较少,工具本事也是有不少的 bug ,
再说说报表
引出选择的这几个工具
再说说遇到的了各种困难踩了,各种坑,团队里也有人再抱怨,资料少,不完整,很多情况是再猜,很多问题是再试
但总体感觉是能解决很多问题的
分享,总结出来,分享给大家。