最近我们项目组在对PLM版本进行升级,我们需要从2013版升级到2016版,在升级过程中我们发现一个问题,在2013及之前的版本中,数据表的过滤器支持两种方式来从Oracle数据库动态获取数据:
1. Java程序的方式,写一个方法,根据实际需求构建查询条件,从数据库获取到数据后再返回到JSP数据表页面,这种方式Enovia PLM称之为program的方式。
2. Inquiry的方式,inquiry由MQL(一种数据库语言,类似于SQL的功能)写出来的,inquiry可以直接从数据库获取数据再返回给页面。
但是从2016版本开始,Enovia PLM的数据表过滤器不再支持inquiry的方式,仅支持program的方式。这就头大了,因为我们有206个inquiry, 都是关于数据表过滤器的,如果我们把这206个inquiry都转换为program的方式,不仅工程量大而且测试起来也要花大量时间。
那么如何用最小的改动来解决好这个问题呢?
我想到了适配器模式,我们可以让客户端(数据表请求者)的代码不做任何改变,它可以使用program或inquiry的方式,但是它的请求会首先经过一个验证器,判断获取数据的方式是哪一种,如果是inquiry的话就会调用programAdapter把inquiry的方式转换为使用program的方式来获取数据, 这样的设计有一些好处:
1. 客户端的代码不需要修改。
2. 新PLM版本关于过滤器的逻辑也不需要改动。
3. 抽取并封装了变化的部分,也就是适配器,如果2017版本对于过滤器有什么改动,我们依然可以修改或扩展适配器的逻辑来满足需要,这样就会有好的可维护性。
为了便于大家从流程上弄清逻辑我上个流程图: