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

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

  • 相关阅读:
    bzoj 4012: [HNOI2015]开店
    POJ 1054 The Troublesome Frog
    POJ 3171 Cleaning Shifts
    POJ 3411 Paid Roads
    POJ 3045 Cow Acrobats
    POJ 1742 Coins
    POJ 3181 Dollar Dayz
    POJ 3040 Allowance
    POJ 3666 Making the Grade
    洛谷 P3657 [USACO17FEB]Why Did the Cow Cross the Road II P
  • 原文地址:https://www.cnblogs.com/stonefeng/p/5738579.html
Copyright © 2011-2022 走看看