zoukankan      html  css  js  c++  java
  • 适配器设计模式应用实例

    最近我们项目组在对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版本对于过滤器有什么改动,我们依然可以修改或扩展适配器的逻辑来满足需要,这样就会有好的可维护性。

    为了便于大家从流程上弄清逻辑我上个流程图:

  • 相关阅读:
    转!!CSRF攻击与防御(写得非常好)
    quartz集群 定时任务 改成可配置
    原!!将集合分段处理
    CentOS 6.5 下安装 Redis 2.8.7
    四层和七层负载均衡的区别介绍(转载)
    使用中值滤波原理过滤异常数据
    ThinkPHP5 <= 5.0.22 远程代码执行高危漏洞
    ThinkPHP 小于5.0.24 远程代码执行高危漏洞 修复方案
    nginx 下载 大文件被截断
    mysql 存储过程 有数据修改 没数据插入
  • 原文地址:https://www.cnblogs.com/stonefeng/p/5738579.html
Copyright © 2011-2022 走看看