excel導出框架

2023-02-17 说明

这个框架的设计意图在于做一个胶水层。通过胶水层来整合并隔离业务代码和Excel工具组件。

设计这个框架的契机,是这么一件事。

我们的某个系统提供了一个导出Excel的功能。功能并不复杂:从数据库中查出待导出的数据,调用POI组件,把数据写入.xlsx文件里。当然也有数据库分页和Excel的分sheet等功能,按下不表。

功能上线后不久,就有用户反馈自己的Excel版本较低,无法打开.xslx文件。于是,产品要求我们改为导出.xls文件。

可是,POI在Excel版本切换方面处理得不太好:很多底层的类都无法兼容。更糟糕的是,这些底层类在业务代码中散落得到处都是。为了实现这一个小小的功能,我们几乎把整个业务模块的代码都重写了一遍。

仅仅是修改一个导出版本,就搞得这么狼狈。如果以后要换一个Excel工具组件,又会怎么样呢?写这个框架的时候,常用的Excel组件只有两种。写这段说明的时候,至少有四种了。

使用其它工具组件也是如此:无论是组件本身的升级,还是换成另一套组件,我们都应该尽量把这种变化封装起来,尽量降低这种变化对业务代码的影响——最好让业务代码无感知。

为了做到这一点,我的选择就是加一个“胶水层”。用胶水层来整合并隔离业务代码与工具组件——整合并隔离,这也算一种对立统一吧。

这种“胶水层”理念一直延续至今。我倾向于使用Feign而不是具体的HttpClient,会自定义一套监控中间层、批处理中间层,追本溯源,都是在这次开发Excel导出功能时汲取的经验和教训。

不过,当初记录这个Excel导出框架时……写得及其简略,基本就只有下面这两张图。

类图

类图

时序图

时序图