重构的原则

文字来自《重构第二版》的相关片段

一、何谓重构

重构是对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低修改成本。

这里这些定义都非严格定义,比如不改变可观察行为,可能重构后对性能有一些影响,或者修复了以前的bug等。最主要的定义应该是:让代码更容易让人理解,让代码更易于由于需求变更或者增加功能而快速实现。

二、为何重构

重构不是“银弹”。它只是一个工具,可以用于一下几个目的。

1、改进软件设计

代码在层层叠叠的迭代中,会发生翻天覆地的变化,会逐渐腐败变质。只有经常重构才能维持架构的整体设计。

2、让软件更容易理解

任何人写出让计算机看懂的代码易如反掌,但写出能让人看懂的代码就难了。

3、可以帮助找到BUG

4、更快的编程速度

这里指代码更易于应对需求变更或者功能添加而能加快编程速度,并非指重构花费的时间。这在实际工作中是深有体会,有时候一团烂泥一样的代码,需求变化一点改起来十分费劲,耗费时间也是大幅上升。

三、何时重构

1、见机行事

编程过程中,时刻在重构。添加新功能或修复BUG的同时顺便重构,小幅前进。漂亮的代码也需重构,例如参数化做到什么程度?函数之间的边界划分等,在每次的新功能添加等情况下,可能不再合理。优秀的程序员知道,添加新功能的最快的办法往往是先修改现有的代码,使新功能容易被加入,再次强调重构的好处。

2、长期重构

替换三方库,抽取公共模块等,这会涉及到程序的整体改动,重构时间长

3、code review时重构

四、何时不该重构

1、重写

2、API将丑陋代码隐藏,且API工作良好

五、重构的挑战

1、重构的唯一目的就是让我们开发更快,用更少的工作量创造更大的价值,但会延缓新功能的开发。不过长久来看,后期会更快。

2、代码所有权与分支

CI小步集成,开发成员至少每天集成一次。代码分模块清晰,只有不断的从一开始就进行重构,才能更易于频繁集成,减低多个成员集成出现bug的风险。

3、测试

编写自动化测试代码,CI集成后可快速进行自动化测试

4、数据库

举例修改列名,先增加新列,插入数据同时写入新列,再修改读取数据,逐个改为使用新字段,最后运行一段时间后,彻底删除老字段,名曰:并行修改(Parallel Change)

5、重构和性能

严格要求的实时系统,需要对资源进行严格划分, 时间和空间都预先分配,这一类程序效率优先,但也不是说重构就不可进行,运用适当的重构,也许会使性能优化更容易。例外性能度量工具可能会发现其实系统的运行速度大半时间都耗费再一小半段代码上,这和软件里大部分代码都不会运行到是一个道理。

6、自动化重构

IDE是个好工具,比起纯文本的编辑器,更利于重构的进行。IDE工具在语法树上实现了代码导航、静态检查等功能,可以同时处理文本和语法树。

eclipse,SI,vscode,emacs都是好工具

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值