博客专栏 -买球官网平台

重构,是这样干的

重构不是一个阳春白雪的高级玩意儿,它是一种习惯,一种良好的编程习惯。这种习惯让我们迅速由菜鸟转变为大牛,可以编写出高质量、优秀的程序;它是遗留系统的一剂良药,它改变了我们的设计思路,让我们不再为不确定的将来过度设计,让设计回归简单与纯真。而这里正是学习“重构”这种优秀设计的家园。

分享到:

最近更新文章

很好,我们终于迈出了重构的第一步,而这第一步我们瞄准了代码问题的重灾区——超级大函数。超级大函数之所以是代码问题的重灾区,就是因为它们 ...
 
有1818人浏览 2014-11-17 09:18
使用抽取方法,虽然道理十分简单,但实际操作起来却并不是那么容易的。完成抽取方法最大的困难,就是如何处理抽取函数与原函数的数据交换。如同 ...
 
有1783人浏览 2014-11-02 17:15
说了那么多理论,我们来看看怎样使用抽取方法来重构遗留系统。如前所述,重构的过程首先是阅读程序代码,边阅读边整理程序。将功能相对独立的代码段放在一起,在前面加上注释。调整一些程序的顺序,将相关的代码尽量放在一起,但要保证程序执行的结果不会发生改变。比较典型的,将变量的定义与使用变量的代码放在一起。这个步骤比较实用,因为许多的遗留系统,其代码都有一个坏毛病,就是在程序开始时定义一大堆变量,但要弄清这些变 ...
 
有1935人浏览 2014-10-29 08:57
事情总是这样的:当我们对一个遗留系统一忍再忍,再忍,忍,还要忍……终于积攒到某一天,实在忍无可忍了,拍案而起,不能再忍了,重构!!!事情就这样发生了。然而,在这时你突然发现,重构的工作千头万绪,真不知从何开始。堆积如山的问题此起彼伏,期望修改的设计思绪万千。这里有个想法,那里有个思路,什么都想做,却什么都做不了,真是脑子里一团乱麻。这时候,没有一个合理的步骤,清晰的计划,瞎干蛮干是十分危险的,它会为 ...
 
有1605人浏览 2014-10-18 20:49
第五次重构我们引入了数据库的设计,用户信息要从数据库中读取,问候语库存储在数据库中,并支持添加与更新。数据库的引入使自动化测试变得困难了,因为数据状态总是变化着的,而这种变化使得测试过程不能复现,这是我们不愿看到的。因此,我们在设计时将业务与数据库访问分离,形成了userdao与greetingruledao。此时,我们的设计应当遵从“依赖反转”原则,即将userdao与greetingruleda ...
 
有1892人浏览 2014-09-21 11:08
说了那么多,让我们用示例看看,系统重构是应该怎样做自动化测试的。还是回到前面那个helloworld的例子(详见 3.3 小步快跑是这样玩的),该类中有一个sayhello()方法,只要我们输入当前的时间与用户名,就返回对该用户的问候语。如果当前时间是上午,则返回“hi, xxx. good morning!”;如果是下午,则返回“hi, xxx. good afternoon!”;如果是晚上,则返 ...
 
有1912人浏览 2014-09-18 00:52
正如许多事情都有其两面性一样,测试方法也是这样。要保证测试方法正确,最简单、最直观地想法就是多写些测试用例,从更多地角度去测试,但这必然增加我们的测试成本。小步快跑要求我们频繁进行测试,假如我们重构的周期是20分钟,但测试却要花掉10分钟,那么这样的成本就实在太大了。假如这种测试还是开发人员手工测试,每天都有对同样的测试反复执行数十遍,那么开发人员估计就要疯掉了。 你可能立即就想到自动化测试了。是 ...
 
有2106人浏览 2014-09-09 10:48
通过前面的描述你已经对重构中“小步快跑”的开发模式有了一个清楚的认识。学会和习惯小步快跑的开发模式,对于重构工作极其重要,因为它让这种 ...
 
有1601人浏览 2014-09-08 06:59
说了那么多,相信你对小步快跑的概念有了一个初步的印象,但理解还不是很深。让我们来看一看一个实际工作中的例子,来亲身感受一下什么是大布局 ...
 
有1929人浏览 2014-08-26 10:29
开车的朋友一定深有体会,驾驶汽车其实就是在不断矫正汽车行驶方向的一个过程。在整个驾驶过程中,你必须全神贯注地紧盯前方,通过方向盘不断矫 ...
 
有1967人浏览 2014-08-10 14:39
作为优秀开发人员,重构应当成为一种习惯,自然而然地运用重构的开发模式,自然而然地在优化和调整我们的代码。它首先要求我们掌握重构的开发模 ...
 
有1727人浏览 2014-08-04 10:03
下面我们来盘点一下系统重构工具箱里都有什么,也就是看一看系统重构到底都有哪些方法。系统重构总是在不同层次上调整我们的代码,因此重构方法也就分为了多个层次。从总体上看,重构方法分为以下几个层次:方法的重构、对象的重构、对象间的重构、继承体系间的重构、组织数据的重构与体系架构的重构。 前面那个例子我们可以清楚地看到方法的重构过程。方法的重构往往发生在一个对象的内部,是对一个对象内部的优化。从这个例子中 ...
有2195人浏览 2014-07-27 21:55
经过前面的一番讲解,相信你已经对系统重构有了一些初步的认识了。一切的一切仿佛在告诉我们,系统重构总是与需求变更无关。但此时,我不得不告诉你这是真实的谎言。 我们的软件系统总是处于一种变化之中,并且往往是一种由浅入深、由易到难的过程。但是,当系统复杂程度发生变化时,我们应当及时调整我们的设计,来适应新的变化。然而我们没有做到这一点,所以我们的系统维护变得越来越困难。要解决我们的问题必须通过系统重构去 ...
 
有1751人浏览 2014-07-22 08:46
毫无疑问,系统重构是一件如履薄冰、如坐针毡、你必须时时小心应对的工作,你就像走在钢丝上的人,每一步你都必须要保证正确,一个不经意的失误 ...
 
有1850人浏览 2014-07-22 08:37
软件,自从被我们开发出来并交付使用以后,如果它运行得好好的,我们是不会去修改它的。我们要修改软件,万变不离其宗,无非就是四种动机: 1.增加新功能; 2.原有功能有bug; 3.改善原有程序的结构; 4.优化原有系统的性能 。 第一种和第二种动机,都是源于客户的功能需求,而第四种是源于客户的非功能需求。 软件的外部质量,其衡量的标准就是客户对软件功能需求与非功能需求的满意度。它涉及到一个企业、 ...
 
有2187人浏览 2014-07-09 10:58
以往我们在重新设计一个系统时,总是喜欢大布局。全面地整理系统需求,全面地分析系统功能,再全面地设计系统、开发、测试。这样一个过程往往会持续数月,花费大量的工作量。但是,不到最后设计出来,谁都不知道会不会存在问题。这就是“大布局”的弊病。 正因为如此,软件大师在讲述系统重构时总是强调,系统重构应当避免大设计,而应当尽量采用一个一个连续不断的小设计。这就是我们所说的“小步快跑”的设计模式。 小步快跑 ...
 
有2224人浏览 2014-07-07 17:47
当我们开始系统重构的时候,不是着手去修改代码,而是首先建立测试机制。不论什么程序,只要是被我们修改了,理论上就可能引入bug,因此我们就必须要进行测试。既然是测试就必须要有一个正确与否的评判标准。以往的测试,其评判的标准就是是否满足业务需求。因此,测试人员往往总是拿着需求文档测试系统。 与以往的代码修改不同,重构没有引入任何新的需求,系统原来什么功能,重构以后还是这些功能。因此,重构的测试标准就只 ...
 
有2202人浏览 2014-07-02 19:06
前面我们提到了,面对软件工业时代的到来,我们的软件企业陷入了一种更深的迷茫之中,一种“后有追兵,前有悬崖,进退两难”的境地。后有追兵:面对维护了数十年之久的大型遗留系统,我们到底改还是不改?不改,面对越来越多的需求变更,我们维护的成本越来越高,变更变得越来越困难;面对不断涌现的新技术,使我们的系统显得越来越丑陋与落后;面对越来越多的竞争者,使我们面临着被市场淘汰的风险。前有悬崖:原本运行得好好的软件 ...
 
有3101人浏览 2014-06-29 04:19
我常常感到幸运,我们现在所处的是一个令人振奋的时代,我们进入了软件工业时代。在这个时代里,我们进行软件开发已经不再是一个一个的小作坊, ...
 
有3306人浏览 2014-06-18 08:49
我的新书《大话重构》终于要出来啦!这是一本讲咱程序员应该怎样开发高质量代码的书,它用大量精彩的故事,讲解高质量的代码是怎样一步一步开发出来,其设计的过程、心理的历程、遇到的问题、解决的思路…… 这是一本解惑的书,它通过故事向你阐述许多深邃难懂的设计难题;这又是一本故事会,它将那些枯燥的技术问题通过故事娓娓道来。它让你告别游击队转变为正规军,远离劣质代码走向精妙设计,真正明白专业级的软件开发是怎样的 ...
 
有2446人浏览 2014-04-07 16:23
  • 专栏创建者:
  • 创建时间:2014-01-13 20:23:58
  • 专栏文章数:33篇
  • 专栏被浏览:80429 次

本专栏热门文章

最新评论

做了一些开发,看了楼主的文章,我深有感触,为自己的做法找到了理论来源,对一些原来不懂的概念也渐渐明白, ...
codepoe 评论了
thefenghou 写道前一两个星期刚听了范老师的课,收获颇多。再看老师的博客,写得也非常好,再次表 ...
fangang 评论了
前一两个星期刚听了范老师的课,收获颇多。再看老师的博客,写得也非常好,再次表示感谢!
thefenghou 评论了
springjunit4classrunner 现在我们也在用,感觉就是,系统模块"原子化& ...
zhangliguoaccp 评论了
junit现在可以通过springjunit4classrunner来跑测试代码, 这意味着可以让sp ...
zipo2014z2039667 评论了
那里需要扩展那里就抽象,发现好多地方都是这样的
liuwaner118 评论了
“所有企业高管把软件外部质量放在高于一切的高度的同时,软件内部质量却长期为人所漠视。”软件内部质量在“ ...
xiaokek 评论了
邪恶的喵呜 写道女浴室透明的话你是看得见还是看不见女浴室的墙是透明的,那么你就能看到洗澡的人,而仿佛不 ...
xiaokek 评论了
受教了,谢谢!
niliu0911 评论了
xinyuan197 写道值对象具体指? 传递object?还是基本类型的对象形式,如long,int ...
fangang 评论了
global site tag (gtag.js) - google analytics