Refactor integration code

      在开发过程中经常会遇到不同系统的集成integraion。例如:A系统的一个版本可能会支持B系统的若干版本,而B系统的不同版本间的接口有可能会更改(好的系统设计一般不会改接口的,至少也会向下兼容)或者处理流程有一些改变。

      对于这种情况,在开发初期为了赶进度,代码中充斥着if...else...的版本判断

      if (B.version == 1.0) {

           //do something here

      } else (B.version == 1.1) {

          //do something here

      } else {

         //do something here

     }

 

     这样的代码不够优雅,也不够灵活,日后若需要支持新的版本,还要增加else语句。

 

     因此,需要对上述代码进行重构,其中重构的方法之一就是在用代理模式proxy pattern。

    比如系统集成的接口是 BSystemIntegraion, 在BSystemIntegraionImpl中有一些if...else...的代码。

    现在可以定义一个BSystemIntegraionImplProxy 类,也实现BSystemIntegraion接口。A系统对于B系统不同版本的公共功能的方法实现放在BSystemIntegraionImpl类中,不同版本若有不同于公共实现的处理,可以放在各自的实现类BSystemIntegraionImplVer10/BSystemIntegraionImplVer11/BSystemIntegraionImplVer12中,这些类继承了BSystemIntegraionImpl类,也可以

BSystemIntegraionImpl<--BSystemIntegraionImplVer10<--BSystemIntegraionImplVer11<--BSystemIntegraionImplVer12。

(根据实际情况确定不同版本实现类之间的继承关系。)

 

在BSystemIntegraionImplProxy 类中定义不同版本实现的实例,比如:

private BSystemIntegraion bSysIntegraionVer10;

private BSystemIntegraion bSysIntegraionVer11;

private BSystemIntegraion bSysIntegraionVer12;

private BSystemIntegraion bSysIntegraionImpl;

 

在BSystemIntegraionImplProxy 类中定义一个private方法,用于根据不同的版本返回不同的实现。

private BSystemIntegraion getBSystemIntegraionImpl(args) {

       if (B.version==1.0) return    bSysIntegraionVer10;

       if (B.version==1.1) return    bSysIntegraionVer11;

       if (B.version==1.2) return    bSysIntegraionVer12;

 

       return bSysIntegraionImpl;

}

在BSystemIntegraionImplProxy 类实现BSystemIntegraion接口的方法中,可以这样写

@Override

public BusinessObject  bizFunction1(args) {

    return this.getBSystemIntegraionImpl(args).bizFunction1(args);

}

 

在Spring配置文件中,分别定义BSystemIntegraionImplVer10、BSystemIntegraionImplVer11、BSystemIntegraionImplVer12 bean,并把他们注入到 BSystemIntegraionImplProxy bean定义中,把原来spring配置文件中引用BSystemIntegraionImpl ben的地方改成引用BSystemIntegraionImplProxy bean。

 

这样代码就清晰多了。

以后新增B系统版本的支持,需要

1)定义新的实现类,比如BSystemIntegraionImplVer13,

2)修改BSystemIntegraionImplProxy 类,并增加BSystemIntegraion bSysIntegraionVer13属性,修改getBSystemIntegraionImpl(args)方法,

3)修改spring配置文件。

 

这里是工作中的一些记录,如果各位有更好的方法,欢迎指教。谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值