虽然我只负责前端的开发,但是我也同样关心后台的数据集成的实现方式,因为我希望那能按我之前的整体设想进行。
幸运的,老H同志居然能理解我之前跟他说的思路,他最后还是跟我想到一个点上了。由于现在前后端彻底分离了,所以类似structs这样的页面跳转的MVC控制其实是不需要了(实际上mvc交给前端做了),而数据集成其实是面向各个企业内部系统去取数,本身对数据库要求很低,是轻数据库型应用,因此hibernate也是不需要的,spring也太庞大无用武之地。最后后台的数据集成用了最简单最纯粹的servlet,很合我口味。其实就是通过servlet暴露了获取数据的接口供前端调用,然后根据调用参数,决定去哪个系统调用什么数据。
当然,这里还是有一些设计技巧的,实际上老H又一次跟我想到一起,就像我前端想做类似Ioc的效果一样,后台也需要,因为数据接口只有1个,根据调用参数不一样,需要运行时决定实例化哪一个类来进行数据抽取工作。这里老H没有用spring ioc,而是直接用了最直接的class loader,并通过接口化编程模型,为后来的二次开发确定了编程接口。而后所有新增的数据集成类我们都称之为一个data provider。
provider的具体实现方式,有几种,有些系统提供了接口,譬如OA,以前就专门为EIP开发了接口,所以EIP只要调用接口就可以获取到数据了,譬如代办列表,公告列表等;有的系统是提供了数据库视图访问,这些也就直接用jdbc去访问数据库视图即可,譬如一些统计数据指标;还有一些,既没接口又没有数据库视图的,我们就通过抓页面的方式,主动出击。要知道,在企业的环境下,有很多遗留系统,有很多合同的考虑,一些做好的系统未必能马上就给你开发新接口,要等的话就不靠谱了,所以抓页面是一个很主动的手段,不求人,但弱点是,假设被集成的系统页面结构一变化,而抓取的代码不够健壮的话,就会失效。幸好这样的情况在企业里出现的几率较低,一般系统上线稳定后都不会改了。
后台的基本框架就这样定下来了。老H还是有比较强的编码能力的,这东西也没做多久就出来了。就这样,没多久我们就前后台一起联调了。这次合作还是比较顺利的。