重构-改善既有代码的设计:重构原则(二)
1.什么是重构
2.为何重构
1)改进软件设计(整理代码)
重构和设计是相辅相成的,它和设计彼此互补。有了重构,你仍然必须做预先的设计,但是不必是最优的设计,只需要一个合理的解决方案就够了,如果没有重构、程序设计会逐渐腐败变质,愈来愈像断线的风筝,脱缰的野马无法控制。重构其实就是整理代码,让所有带着发散倾向的代码回归本位。
2)提高代码质量和可读性,使软件系统更易理解和维护
"任何一个傻瓜都能写出计算机可以理解的程序,只有写出人类容易理解的程序才是优秀的程序员"。有些程序员总是能够快速编写出可运行的代码,但代码中晦涩的命名使人晕眩得需要紧握坐椅扶手,试想一个新兵到来接手这样的代码他会不会想当逃兵呢?
软件的生命周期往往需要多批程序员来维护,我们往往忽略了这些后来人。为了使代码容易被他人理解,需要在实现软件功能时做许多额外的事件,如清晰的排版布局,简明扼要的注释,其中命名也是一个重要的方面。一个很好的办法就是采用暗喻命名,即以对象实现的功能的依据,用形象化或拟人化的手法进行命名,一个很好的态度就是将每个代码元素像新生儿一样命名,也许笔者有点命名偏执狂的倾向,如能荣此雅号,将深以此为幸。
对于那些让人充满迷茫感甚至误导性的命名,需要果决地、大刀阔斧地整容,永远不要手下留情!
3)帮助尽早的发现错误(Defects)
孔子说过:温故而知新。重构代码时逼迫你加深理解原先所写的代码。程序员经常对自己的程序逻辑不甚理解的情景,曾为此惊悚过,后来发现这种症状居然是许多程序员常患的"感冒"。当你也发生这样的情形时,通过重构代码可以加深对原设计的理解,发现其中的问题和隐患,构建出更好的代码。
4)提高编程速度
良好设计是维持软件开发速度的根本,重构可以帮助你更快的开发软件。因为它防止系统腐败变质。甚至还可以提高设计质量。当你发现解决一个问题变得异常复杂时,往往不是问题本身造成的,而是你用错了方法,拙劣的设计往往导致臃肿的编码。
改善设计、提高可读性、减少缺陷都是为了稳住阵脚。良好的设计是成功的一半,停下来通过重构改进设计,或许会在当前减缓速度,但它带来的后发优势却是不可低估的。
3.何时重构
1)重构应该是随时随地进行。不应该为重构而重构。
2)三次法则:第一次做某件事只管去做;第二次做类似的事会产生反感,但无论如何还是可以去做 第三次 再做类似的事情,就应该重构了。
3)添加功能
4)修复bug
5)复审代码,即Code Review时候
重构可能会引入更多见阶层,重构往往需要把大型对象拆成多个小型对象。把大型函数拆成多个小型函数。间接层是把双刃剑:一是你需要管理多分内容。
但间接层有以下作用:
1)允许逻辑共享,小函数复用性高。
2)分开解释意图和实现:可以选择类名和函数名解释实现意图的做法。
3)隔离变化
4)封装条件逻辑:对象有一种奇妙的机制:多态消息,可以灵活而清晰地表达条件逻辑。将条件逻辑转化为消息形式,往往能降低代码的重复。增加清晰度并提高弹性。
4.何时不该重构
1)代码是在太混乱了,设计完全错误。
2)如果项目已近最后期限,应该避免重构。
3)重构还不如重新编码。即重构的工作量显著的影响Estimate
5.重构流程
6. 重构与设计
1)很多人都把设计看作软件开发的关键换进。而把编程看作只是机械式的低级劳动。
2)另外的观点就是:重构可以取代预先设计。你不必要做任何设计,只管按照最初的想法开始编码,让代码运作,然后再将它重构成型。
实际上重构与设计是互补的,程序应该是先设计,而在开始编码后,设计上的不足可以用重构来弥补.设计应该是适度的设计,而不必过度的设计.如果能很容易的通过重构来适应需求的变化,那么就不必过度的设计,当需求改变时再重构代码 。
7.重构与性能
重构-改善既有代码的设计:重构原则(二)相关推荐
- PHP 杂谈《重构-改善既有代码的设计》之二 对象之间搬移特性
思维导图 索引: Ø Move Method(搬移函数) Ø Move Field (搬移值域) Ø Extract Class (提炼类) Ø Inline Class (将类内联化,就是把当前的类 ...
- 重构—改善既有代码的设计
概述 1.1 参考资料 <重构-改善既有代码的设计>读后总结 <重构改善既有代码的设计> 22种代码的坏味道,一句话概括 1.2 何谓重构 首先要说明的是:视上下文不同,重构的 ...
- 『重构--改善既有代码的设计』读书笔记----序
作为C++的程序员,我从大学就开始不间断的看书,看到如今上班,也始终坚持每天多多少少阅读技术文章,书看的很多,但很难有一本书,能让我去反复的翻阅.但唯独『重构--改善既有代码的设计』这本书让我重复看了 ...
- PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
介绍 承接上文的PHP 杂谈<重构-改善既有代码的设计>之 重新组织你的函数继续重构方面的内容. 这章主要针对数据的重构. 1.争论的声音--直接访问Field还是通过函数(Accesso ...
- 重构 改善既有代码的设计:代码的坏
以下内容来自<<重构 改善既有代码的设计>> 一.什么是重构 所谓重构(Refactoring)是这样一个过程:在不改变代码外在行为的前提下,对代码做出修改以改进程序的内部结构 ...
- 《重构-改善既有代码的设计》-第1例:租赁影片(2)
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 上接 重构-改善既有代码的设计-第1例:租赁影片(1) 2 运用多态取代与价格相关的条件逻辑 2 ...
- 《重构-改善既有代码的设计》-第1例:租赁影片(1)
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 买了<重构 - 改善既有代码的设计 >一书,一直没有好好看,大致过了下也觉得只是有点点印 ...
- 实践提高《重构改善既有代码的设计第2版》PDF中文+PDF英文+对比分析
重构是编程的基础,是在不改变外部行为的前提下,有条不紊地改善代码.编程爱好者都知道,Martin Fowler 的<重构:改善既有代码的设计>已经成为全球有经验的程序员手中的利器,既可用来 ...
- 重构改善既有代码的设计(github源码)
refactoring improving the design of existing code(重构改善既有代码的设计) https://github.com/CoderDream/refacto ...
- 重构:改善既有代码的设计(软件开发的不朽经典)
重构:改善既有代码的设计(软件开发的不朽经典) 基本信息 作者: (美)Martin Fowler 译者: 熊节[同译者作品] 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:978 ...
最新文章
- java list 查找_java面试之容器
- Py之featuretools:featuretools库的简介、安装、使用方法之详细攻略
- 3DSlicer16:数据类型MRML
- Vue 适配移动端 使用 postcss-pxtorem lib-flexible 插件 转px为vw rem
- boost学习之boost::lock_guardT与boost::unique_lockT的区别
- linux中产生随机数函数,如何用C++产生随机数
- Nginx 系列:Nginx 实践,location 路径匹配
- 学习笔记——模板方法模式
- 问道手游服务器维护,问道手游2021年5月20日维护公告_问道手游2021年5月20日更新了什么_玩游戏网...
- Connection could not be established with host smtp.163.com 阿星小栈
- 【认识 NVIDIA GPU】GPU相关基础概念介绍
- 非计算机专业有前景吗,十大最有前景的专业,第一名居然不是计算机
- html5制作波浪,技能get:用HTML5实现波浪效果
- 【附源码】计算机毕业设计SSM网上商城比价系统
- 山东大学软件学院众智科学与网络化产业(网络、群体与市场)复习笔记
- 详解联想bios怎么进入u盘启动
- springboot feign too many bytes written executing
- 从long long 谈类型转换
- CDN新品发布:阿里云SCDN安全加速开放公测
- Windows Server 2012 R2 部署JavaWeb项目之环境、软件、配置
热门文章
- 【设计模式】观察者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
- 自己写的一个简单的购物车的登录购买
- 任务05—学习 MARKDOWN 语言
- SAP smartforms之Zebra print control language
- Java 集合系列(三)Collection 接口
- Java 8 Date-Time API 详解
- APK Expansion Files / Obb 接入介绍
- 【BUG】小米5中 video.js 在钉钉 webview 中全屏后 后退无法弹出虚拟键盘
- 如何编写更好的SQL查询:终极指南-第三部分
- 5 个关于 API 中日期和时间设计规则