修改方法签名的重构手法-阿里云开发者社区

开发者社区> 无敌西瓜> 正文

修改方法签名的重构手法

简介: 今天看到同事写的一篇博客《依赖快捷键做重构是不行的》。里面讲了一个这样的案例:本来有一方法,假设叫methodA。 1 2 3 public void methodA(){ // blablabla... } 后来由于需求变动,需要增加一个参数,姑且看做这个样子。
+关注继续查看

今天看到同事写的一篇博客《依赖快捷键做重构是不行的》。里面讲了一个这样的案例:本来有一方法,假设叫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:我知道这两款产品都不是免费的,但是对于程序员来说,节省了时间就是节省了金钱,对于工具,当然要用最好的。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10077 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
11612 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13884 0
微信支付应用签名修改后多久可以生效?
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/inforstack/article/details/77229181 签名是立即生效,手机上的微信客户端会缓存之前的签名,所以新签名应用不上。
855 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
11889 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
7496 0
+关注
无敌西瓜
黄博文,ThoughtWorks资深软件工程师/咨询师。在国内外多家企业做过技术教练以及技术咨询,拥有丰富的敏捷团队工作经验。拥有AWS解决方案架构师以及开发者证书。译作有《面向对象的思考过程》、《基础设施即代码》等。
173
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载