像工匠一样进行重构--《Refactoring WorkBook》
2008-02-23 10:12:24来源:互联网 阅读 ()
Martin Flower的《Refactoring》其实更适合做一本关于重构的洗脑,宣言式的书,就像Kent Beck的《XP Explain》一样薄薄的就可以了。只可惜他却非常的厚。真正动手重构,我更喜欢《Refacoring WorkBook》,他以一个工匠的语气传授重构的手艺,,让重构从理论变为一门机械实在的手艺。
1.重构 Within Classes
Long Method,Large Class,Long Parameter List, 一般通过度量工具找出来,还可以自己设定一个触发器,当度量结果超过某个限度时就报警. PMD可以实现这个功能, 但软件度量工具我更喜欢Metrics Reload, 一个IDEA的插件, 给出的度量信息很全面.
另外切忌为了度量的数字而重构。
Long Method当然是尝试Extract Method.
Large Class就要把类的职能分开几个域, 尝试拆出另一个Class或者SubClass
Long Parameter List 可以通过在方法内的变量用查询获得而不用由参数传入;
或者把某些参数组成一个对象.
重复是30年前就被认为是不好的一样东西,表现在代码类似或者代码、接口不同而作用相近。
去除重复的方法也没什么特别,无非就是
Extract Method(同一个类)。有差异时,通过参数化达到共用。
Pull Up Method到父类(同一个父类)。有差异时,通过模板机制达到共用。
Class A调用Class B 或者 Extract Class C (两个完全无相干的类)
中国程序员的英文本来就差, 要多参考Ofbiz,Comperie的命名, 尽快建立自己的项目字典,领域术语字典。
作者认为,即使现在Program最关注的是对象,以及对象间的关系了,但优质的内部代码依然重要,推荐《编程珠玑》和《Elements of Programing style》
化简复杂条件的基本有三个方法
1.通过!(A&B)==(!A)||(!B)化简
2.通过有意义的变量,函数代替条件表达式,比如
boolean isMidScore = (X>1000)&&(X<3000);
3.通过把一个if拆分开来执行,把guard clause放在前面
比如if(A||B)
do();
->if(A)
do();
if(B)
do();
又可以把2,3灵活组合,比如根据2,Extract出一个isRight()函数,根据3
isRight()
{
if(A)
return true;
if(B)
return true;
}
1.5 其他
死代码, 通过IDE工具探知并移除。小心有些框架代码是不能删除的。
Magic Number,当然是改为常量。如果Magic Number很多,可以用Map枚举类来存放.
除臭剂式的注释,为方法,变量改一个更适合的名字。如果注释是针对一个代码段的,可以Extract Method。当然,代码只能说明how, 不能说明why,更不能说明why not,这才是注释存在的地方。
上一篇: A REVIEW OF SQLEXPLORER PLUG-IN
下一篇: 第五章 java语言的接口
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash