随笔 - 181  文章 - 15  trackbacks - 0
<2007年7月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(1)

随笔分类

随笔档案

My Tech blog

搜索

  •  

最新评论

阅读排行榜

评论排行榜

重构原则
重构的几个定义
重构(名词):对软件内部结构的一种调整,目的是在不改变"软件之可察行为"前提下,提高可理解性降低修改成本

重构(动词):使用一系列重构准则(手法),在不改变"软件之可察行为"的前提下,调整其结构。

重构和性能优化的相同之处:通常都不会改变组件的行为,只会改变其内部结构。
重构和性能优化的不同之处:出发点不同。性能优化往往使代码较难理解,但为了得到所需的性能,你不得不那么做。
两顶帽子
添加新功能和重构是两种截然不同的行为。添加新功能时,你不应该修改既有代码,只管添加新功能。通过测试,你可以衡量你自己的工作进度;重构时你就不能再添加功能,只管改进程序结构。此时你不应该添加任何测试(除非你发现先前遗漏的任何东西),只在绝对必要(用以处理接口变化)时才修改测试。
软件开发过程当中,你可能会经常更换帽子,但是无论在什么时候,都必须清楚自己戴的是哪一顶帽子。

重构的目的:
1、重构改进软件设计
同样完成一件事,设计不良的程序往往需要更多代码,这常常是因为代码在不同的地方使用完全相同的语句做同样的事。因此改进设计的一个重要方向就是消除重复代码。如果消除重复代码,你就可以确定代码将所有事物和行为都只表述一次,唯一一次,这正是优秀设计的根本。
2、重构使程序更容易被理解
要及时填补想要他做什么和告诉他做什么之间的缝隙。这种编程模式的核心就是“准确说出吾人所欲”。
这种可理解性还有另一方面的作用。我利用重构来协助我理解不熟悉的代码。当我看到不熟悉的代码,我必须试着理解其用途。我先看两行代码,然后对自己说:“噢,是的,它做了那些......”。有了重构这个强大武器在手,我不会满足于这么一点脑中体会。我会真正动手修改代码,让他更好的反应出我的理解,然后重新执行,看它是否能够仍然正常运作,以此检验我的理解是否正确。
3、重构助你找到臭虫
重构能够帮助我写出强健稳固的代码。
4、重构助你提高编程速度
良好设计是维持软件开发速的的根本。重构可以帮助你更快速的开发软件,因为它阻止系统腐败变质,它甚至可以提高设计质量。
重构的时机
重构本来就不是一件“特别拨出时间做”的事情,重构应该随时随地进行。不应该为重构而重构,重构是因为你想做别的事,重构可以帮助你把事情做好。
事不过三,三则重构.
1、添加功能时一并重构
想要理解代码-->重构-->理解代码
想要添加特性-->重构-->更容易的添加特性
2、修补错误时一并重构
如果在修改错误的时候,不能一眼发现错误,说明需要重构。
3、复审代码时一并重构
复审代码有助于在开发团队中传播知识。
重构可以帮助我复审别人的代码。
得到一定程度的理解-->想到一些点子-->重构-->进一步的理解-->更好的点子。如果不进行重构,我永远也无法得到这样的认识。
最好是一个复审者搭配一个原作者,共同处理这些代码。复审者提出修改建议,然后两人共同判断这些修改能否通过重构轻松实现。果真能够如此,就一起着手修改。

为什么重构有用(Why Refactoring Works)
---Kent Beck

程序具有两面价值:今天可以为你做什么,明天可以为你做什么。大多数时候,我们都只关注自己今天想要程序做什么。不论是修复错误或是添加特性,我们都是为了让程序能力更强,让它在今天更有价值。
但是系统今天(当下)的行为,只是整个故事的一部分,如果没有认清这一点,你无法长期从事编程工作。如果你“为求完成今天任务”而采取的手法使你不可能在明天完成明天的任务,那么你还是失败。但是,你知道自己今天需要什么,却不一定知道自己明天需要什么。也许你可以猜到明天的需求,也许吧,但肯定还有些事情出乎你的意料。
对于今天的工作,了解得很充分;对于明天的工作,我了解得不够充分。但如果我纯粹只是为今天工作,明天我将完全无法工作。
重构是一条摆脱束缚的道路。如果你发现昨天的决定已经不适合今天的情况,放心改变这个决定就是,然后你就可以完成今天的工作了。明天,喔,明天回头看今天的理解也许觉得很幼稚,那时你还可以改变你的理解。
是什么让程序如此难以相与?下笔此刻,我想起四个原因,它们是:
难以阅读的程序,难以修改;
逻辑重复的程序,难以修改;
添加新行为时需要修改既有代码者,难以修改。
带复杂逻辑条件的程序,难以修改。
因此我们希望程序:(1)容易阅读;(2)所有逻辑都只在唯一地点指定;(3)新的改动不会危及现有行为;(4)尽可能简单表达逻辑条件。
重构是这样一个过程:它在一个目前可以运行的程序上进行,企图在“不改变程序行为”的情况下赋予上述美好性质,使我们能够继续保持高速开发,从而增加程序的价值。

posted on 2007-06-21 22:37 littlegai 阅读(177) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理