• 修改方法签名的重构手法


    修改方法签名的重构手法

    今天看到同事写的一篇博客《依赖快捷键做重构是不行的》。里面讲了一个这样的案例:本来有一方法,假设叫methodA。

    1
    2
    3
    
    public void methodA(){
      // blablabla... 
    }
    

    后来由于需求变动,需要增加一个参数,姑且看做这个样子。

    1
    2
    3
    
    public void methodA(String param){
    //  blablabla... 
    }
    

    他本来想直接修改方法签名(Intellij中快捷键是Ctrl+F6)。但这样会导致所有调用此方法的地方由于缺乏对新加参数的处理,会导致单元测试甚至编译失败。他得出结论说依赖快捷键做重构是不行的。

    我想说的是并不是依赖快捷键做重构不行,而恰恰是没有快捷键做重构会异常痛苦。如果没有方便的快捷键的话,依靠手工做重构会大大增加重构的时间成本及出错成本。正是由于重构快捷键的越来越便利,才导致重构不再是奢侈品,而成了家常便饭。

    其实针对这种情况是使用快捷键的思路不对。我们的目标是对methodA添加一个参数,看似直接采用修改方法签名的快捷键就可以直接搞定。但其实这种想法是大大错误的。 结合他在文中给出的另一个实现方式,修改方法签名的一个正确的顺序应该是这样的。

    1. 新写一个methodA2,这个方法相当于重构后的methodA。如果实现需要调用methodA,可以直接调用。

    2. 使用查找所有用例的快捷键(Ctrl+Alt+F7)查找methodA的所有用例,并逐一修改为调用methodA2的实现。期间每改一处要运行一下测试,防止修改破坏了原有功能。

    3. 如果methodA2调用了methodA方法,使用inline method快捷键(Ctrl+Alt+N)将methodA inline到methodA2中。

    4. 使用safe delete快捷键(Alt+Delete)删除methodA方法。如果仍然有指向methodA的方法调用,IDE会进行提示。

    5. 使用rename的快捷键(Shift+F6)将methodA2方法重名为methodA。

    我们可以看到,这五步中有四步都需要IDE的快捷键支持。如果脱离了IDE的快捷键,你会发现连一个小小的rename都会花上大量的时间。

    而这种方式与一上去就直接修改方法签名的方式好在那里?

    • 基本不会出现编译错误。直接修改方法签名会陷入修复编译错误的泥潭。

    • 小步前进,随时可以停下而不担心程序构建失败。方式一会将程序带入一个漫长的不稳定的状态。

    学会重构手法固然重要,但是掌握IDE提供的重构快捷键也不能轻视。如果你是Java程序员,推荐使用Intellij,里面的重构快捷键比eclipse多出不少,而且效果更好。如果你是c#程序员,推荐给你的Visual Studio装上ReShaper。注意IntellijReShaper都是JetBrains出品的。要知道程序员挑选IDE就跟女生使用化妆品一样挑剔,但是JetBrains赢得了广大程序员的心。

    PS:我知道这两款产品都不是免费的,但是对于程序员来说,节省了时间就是节省了金钱,对于工具,当然要用最好的。

    作者:黄博文 @无敌北瓜 
    出处:http://www.cnblogs.com/huang0925
    黄博文的地盘
    本文版权归本人和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
     
    分类: 编程开发
  • 相关阅读:
    第04组(64) 需求分析报告
    第04组(64) 团队展示
    结对编程作业
    Python单元测试框架 Unittest 的简单使用方法
    第一次个人编程作业
    第09组 Alpha冲刺 总结
    Swagger 工具集
    第09组 Alpha冲刺(6/6)
    第09组 Alpha冲刺(5/6)
    第09组 Alpha冲刺(4/6)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2998842.html
Copyright © 2020-2023  润新知