重构: 改善既有代码的设计

本文探讨了重构代码的重要性,包括提升代码质量、增强可读性和维护性等。介绍了重构的前提条件及好代码的标准,并列举了多种重构的原因和时机。此外,还讨论了何时不应重构以及识别坏代码的方法。最后给出了具体的重构建议和技术手段。

重构: 改善既有代码的设计

  • 重构的前提
    • 重构的前提是有一套可靠的测试集
    • 好代码的检验标准是人们可以轻而易举的读懂并修改它
    • 重构过程中应时刻保持应用可以通过所有测试集
    • 重构时应清楚自己是在重构代码还是在添加新功能
  • 为何重构
    • 找到bug
    • 为了更易于理解设计
    • 为后续添加功能打基础
  • 何时重构
    • 添加新功能时
    • 为了帮助理解时
    • 发现问题时,记录下来有空再处理
    • 为了系统的健壮性,有计划的去重构
  • 何时不重构
    • 在需要理解内部详细情况下不重构
    • 如果重写比重构简单,那么重写
  • 坏代码
    • 神秘命名:不明白的意思的名称 -> 名称应与业务逻辑相关
    • 重复代码: 多个地方的逻辑是一样的 -> 整合重复代码
    • 过长的函数: 会让人不知道到底做什么 -> 提炼函数,命名规整
    • 过长的参数列表: 会让人疑惑 -> 使用结构
    • 全局数据: 容易被其他地方修改而不知
    • switch : 应使用多态来实现
    • 注释:应用命名代替注释,对于复杂的或者特别的可以注释说明
  • 编写测试用例的好处
    • 可以更清楚知道自己是否有bug
    • 更全局的考虑场景和代码吻合度
  • 如何编写测试
    • 针对某一特定功能 (容易错的地方)
    • 写特别有的针对性的用例
    • 用全局变量时注意多个用例共用时可能出现的问题
    • 有bug时,先写测试用例来暴露它,以便解决它
  • 重构建议
    • 尽量小步的重构,确保每个部位都是正确的
    • 注意多个方法使用同一个引用对象时发生的事情,可能超出你的意料
    • 在构建足够清晰的代码时,可以考虑使用内联或者提炼,让表达更清晰。
    • 当一个逻辑十分复杂时,考虑使用局部变量来让他简短而明了。
    • 封装数据时,考虑是否应该共享源数据。(不需要可以返回副本)
    • 将每个步骤区分开,提取各个步骤所需的公共数据,让逻辑更清晰
  • 重构方式
    • 封装:封装变量,定义类职责,思考应该暴露的概念,以及期望的效果
    • 搬移特性:将变量或方法定义在符合设计的地方,以便理解和合理建模
    • 重新组织数据:定义变量或者使用时候,要考虑到使用时如果被修改,可能造成的影响,比如在方法中传入对象,如果方法内修改了对象的内部变量值,可能影响其他使用者。
    • 简化条件逻辑:变量的逻辑判断给人的感受不如用文字表明的一个包装函数直观,适当使用断言帮助理解行为,使用多态来分解逻辑判断的难理解或共同点
    • 重构API:一个函数尽量制作一件事情,函数参数传变量还是对象基于函数作用考虑
    • 处理继承:将重复的代码尽可能移动到父类中。 不要过度设计导致滥用继承。继承应该作为具有相同行为的对象的一种抽象。 适当使用委托来减少过度的继承

一切都是为了便于理解。

本书6-12章讲述重构的手法,不一定都会用上,只是说明遇到某些情况,你可以使用它。
其他书籍 : 《修改代码的艺术》 《设计模式》

一直很喜欢重构这本书,但是由于自己记性不太好,书看过之后其中的方法总是记不住,于是想如果有电子版的重构书就好了,工作中遇到重构的问题可以随时打开查阅。在网上搜索了许久,发现重构这本书有英文chm版本的,而中文版的电子书只有扫描的PDF版本,用起来非常不方便。于是萌生想做一本重构工具书的想法,本来打算自己重新将重构书的内容再整理归类一下,后来发现原书的目录编排就很适合做工具书,包括坏味道分类,重构手法归类等,都有了一个比较系统的整理。因此,我利用空余时间制作了这样的一本中文的chm版重构,希望对大家有所帮助,也算对中国软件业做出一点小小的贡献。 本书基本上是取自”重构”中文版一书的内容,但格式上参照的是chm英文版的格式,还有一些格式小修改,比如第一章的重构前后代码对比。因为时间匆促,个人能力有限,本书难免存在一些缺漏,如果大家发现有问题,随时可以给我发邮件,我会尽快更新错误的内容。 最后再次感谢几位大师 Martin Fowler、Kent Beck等,还有翻译的侯捷和熊节先生,为我们带来这么精彩的一本书。谢谢。 免责声明:本书仅供个人学习研究之用,不得用于任何商业目的,不得以任何方式修改本作品,基于此产生的法律责任本人不承担任何连带责任。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值