文档章节

重构随笔——重构的原则

人独立
 人独立
发布于 2016/07/21 16:15
字数 790
阅读 34
收藏 2

重构的基本原则之一:不改变软件的可观察行为。

这一基本原则阐述的是我们在做重构的时候,维持外部的功能外观不变,让用户无法感知重构的变化。其实这很好理解,重构与添加新功能两者的角色仿佛总是对立的。添加新的功能与重构所做的事情应该恰恰相反:不应该修改既有的代码,只是添加功能而已。

我们总是在不知不觉中切换两者的角色,业务需求总是要我们添加新的功能,但是我们在开发过程中会发现,如果重构一下代码,可以更优雅的添加我们的功能。所以你会发现两者其实并非绝对对立:重构为了更好的增新,增新则会带来新的重构。

这与中国道家的阴阳理论不谋而合,“奇正相生,如循环之无端,孰能穷之。”没有一劳永逸的重构,在代码的编写上,重构与增新总是循环往复,交织在一起。分清你现在的角色就显得很重要了,重构的时候一定要牢记自己的原则与初衷,这样才不会在重构上偏的太远。

重构的时间原则:理论上,当你感觉到代码让你写起来觉得恶心的时候,意味着重构的时机已到。没有什么特定的时间去重构,想到了就去做,随时随地,不用为重构留出特意准备的时间,你会发现你定好的时间总是或早或晚,早了没有必要,晚了则承受了太多痛苦。但是在项目的开发中,我们总要遵循一定的规范,那么我建议是下面三个时机是最好的。

1.添加功能的时候。最重要的时机,你总会在新增功能的时候发现设计上不合理的时候,这是你可以体会你设计上优缺点最敏感的时候,不要错过这个时机。

2.修复BUG的时候。错误往往是由于你的设计不合理而产生的,设计上的不合理会让你产生对代码的误解,从而在修改代码的时候引入新的错误。如果你的项目中总是有一些无法一眼看到的BUG隐藏在角落里,那么这个时候你就需要考虑去重构你的代码。

3.审核代码的时候。审核代码一般都是很多人在一起或者是一个老手在审核你的代码,人们往往总是针对一个熟识的东西会无意识的过滤其优缺点。代码也是,我们需要别人给我们提供建议,他们的建议是站在别人的角度,这对于我们是尤为重要,代码是要给人读的,能写出给机器读的代码很容易,写出给人读的代码才是高手。

© 著作权归作者所有

共有 人打赏支持
人独立
粉丝 5
博文 39
码字总数 17213
作品 0
昌平
程序员
读《代码重构》一书小计

通过阅读《代码重构》一书,让我了解的最重要的一点是“重构不同于优化”。在这之前,我的观念中,“重构”与“优化”是划等号的。不过通过这本书,我了解到他们做着完全不同的事情,甚至是对...

钟良
2016/07/13
160
1
重构 - 代码整洁之道

作者简介 新茗 蚂蚁金服·数据体验技术团队 前言 之前也介绍过我们团队的前端项目从零开始经历8个月迭代业务代码10万行(仅为产品长期规划需求的20%),至今仍然在不断迭代的过程。 团队成员除...

01/14
0
0
.NET系列文章——近一年文章分类整理,方便各位博友们查询学习

由于博主今后一段时间可能会很忙(准备出书:《.NET框架设计—模式、配置、工具》,外加换了新工作),所以博客会很少更新; 在最近一年左右时间里,博主各种.NET技术类型的文章都写过,根据...

王清培
2014/03/02
0
0
重构(Ruby版)迷你书免费下载

《重构(Ruby版)》前言 差不多十年前,我(Martin)曾经和Kent Beck一起做过一个项目。这个项目的名字叫C3,它后来成为极限编程诞生的标志性项目,并帮助我们看清了敏捷软件运动的方向。 我们...

hzbook2010
2010/05/21
943
1
代码重构方向原则指导

重构是 一种对软件进行修改的行为,但它并不改变软件的功能特征,而是通过让软件程序更清晰,更简洁和更条理来改进软件的质量。代码重构之于软件,相当于结构修改 之于散文。每次人们对如何对...

oschina
2013/10/21
5.5K
19

没有更多内容

加载失败,请刷新页面

加载更多

js 操作cookie

var cookie = {// 设置cookie方法 set:function(key,val,time){ var date = new Date(); //获取当前时间 var expiresDays = time; //将date设置为n天以后的时间...

小丶二
2分钟前
0
0
限制root远程登录 su和sudo命令

9月21日任务 3.7 su命令 3.8 sudo命令 3.9 限制root远程登录 对于Linux而言,权限的重要性毋庸置疑!对于普通用户而言无法执行那些只有root用户才能有效的命令,导致工作无法有效进行; 系统...

robertt15
4分钟前
0
0
MQTT协议的初浅认识之通讯级别和持久会话

背景 这是我最近了解MQTT协议的最后一部分内容了,MQTT协议里面的QOS和Keep Alive是两个比较重要的内容。QOS的设置,直接影响了订阅客户端与中间件之间的消息交互行为。而Keep Alive直接影响...

亚林瓜子
6分钟前
0
0
calc

width: calc(100% - 30px); 特别注意:减号左右空格,均不能去掉。 width: calc(100% - 30px);

柴高八斗之父
15分钟前
0
0
Spring Cloud Gateway全局过滤器GlobalFilter:返回消息和重定向

Spring Cloud Gateway的全局过滤器GlobalFilter,顾名思义,声明后会对所有的请求生效,可以用来做权限控制,这里简单记录一下拦截到非法请求后如何返回自定义信息和将请求重定向到指定URL。...

夜雨寄北09
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部