`

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配置文件。

 

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

分享到:
评论

相关推荐

    test-driven-java-development-2nd2018

    and finally, we'll refactor the code and try to make it better. Chapter 4, Unit Testing – Focusing on What You Do and Not on What Has Been Done, shows that to demonstrate the power of TDD applied to...

    Re-Engineering.Legacy.Software

    Core topics include deciphering and modularizing awkward code structures, integrating and automating tests, replacing outdated build systems, and using tools like Vagrant and Ansible for ...

    Test-.Driven.Python.Development.1783987928

    Towards the end of the book, we'll take a look at the most common patterns and anti-patterns associated with test-driven development, including integration of test results into the development ...

    Reengineering.NET.0321821459.epub

    refactor to services and controllers, and leverage powerful .NET reengineering tools built into Microsoft Visual Studio 2012. This book is an indispensable resource for all developers, architects, ...

    Intellij idea高效使用教程_Intellijidea高效使用教程_

    - 配置VCS:"VCS" -&gt; "Enable Version Control Integration",选择Git或SVN等。 - 提交与推送:使用"VCS" -&gt; "Commit Changes",然后"Push"到远程仓库。 8. **重构** - 重命名:选中变量或方法,右键选择...

    idea优化配置,图文详解

    1. **Git整合**:IDEA内置Git支持,通过`VCS`菜单可以进行版本控制操作,安装`Git Flow Integration`插件支持Git Flow工作流。 2. **Lombok插件**:用于简化JavaBean代码,安装后自动处理`@Getter`、`@Setter`等...

    django-master-class

    The idea is to first write a failing test, then write the necessary code to pass the test, and finally refactor the code to improve its design and quality. TDD encourages a more structured approach ...

    IntelliJIDEA的安装、配置与使用.pdf

    4. **重构**: IntelliJ IDEA提供了丰富的重构工具,如重命名(Refactor &gt; Rename)、提取方法(Refactor &gt; Extract &gt; Method)等。 5. **运行与调试**: 使用`Run`菜单或工具栏上的按钮可以快速运行或调试程序。还...

    Ray Wenderlich - iOS 11 Tutorials

    - **Refactoring Improvements:** Improved refactoring tools make it easier to rename, move, and refactor code across a project. - **Wireless Debugging:** Developers can now debug their apps wirelessly,...

    IntelliJ_IDEA_设置 idea9

    1. **Git配置**:在“VCS” -&gt; “Enable Version Control Integration”中选择Git,然后在“Settings” -&gt; “Version Control”中配置Git路径和常用设置。 2. **提交操作**:通过“VCS”菜单或底部工具栏,可以方便...

    idea配置idea配置

    IntelliJ IDEA支持大量插件,如Git integration、Lombok support、JUnit等,这些插件能扩展IDE的功能。安装新插件可以通过“Settings” &gt; “Plugins”进行,也可在此查看已安装的插件列表。确保安装了与项目需求相关...

    demo-tdd1:演示测试驱动的Spring-boot开发

    5. **Red-Green-Refactor** 循环:TDD的核心流程,首先写一个失败的测试(Red),然后编写最小化的代码使其通过(Green),最后重构代码以保持整洁和可维护(Refactor)。 6. **Mocking and Stubs**:在测试中模拟...

    churn-php:发现需要重构的文件

    帮助发现良好的重构候选人。 目录 它是什么? ... 检查它有多少个提交。 计算圈复杂度。... 根据这两个值创建一个分数。... 与变化不大且复杂度低的文件相比,变化大且复杂度高的文件可能是重构的更好候选者。...

Global site tag (gtag.js) - Google Analytics