我读经典(5):读《大话重构》迷你书有感

近期。我在一个QQ群里面看到有人在讨论一本书,叫做《大话重构》。在闲暇之余,我下载了该书的电子版,是一本迷你书,仅仅包括了4 章内容。读完这本迷你书,结合自身的工作。我想说一下自己对于重构的看法。

重构。是一把双刃剑,开发者不要轻易使用。举个样例来说,你如今正在从事某个行业的工作。但有人告诉你另外一个行业赚钱多并且快。于是你就非常纠结,究竟要不要改行呢?不改行吧,钱挣得少。改行吧,自己又是新手。对那个行业又不熟悉。这样的心理状态事实上就是开发者对于重构的态度,能够用“进退维谷”来形容。

1. 重构的原因

依据书上所说,结合自身的经验,重构的原因如图1所看到的。

图1 重构的原因

2. 重构的原则

重构的原则如图2所看到的。

图2 重构的原则

3. 重构的流程

重构的流程如图3所看到的。

图3 重构的流程

总的说来,对于程序来说,重构就相当于做一次大的手术,因此一定要认真对待。贯穿整个重构过程的是不断地測试、測试、再測试。我们须要不断地实践才干够对整个重构的流程得心应手。

附:《大话重构》迷你书经典语句

第1 章重构:改变既有代码的一剂良药

1.1 什么是系统重构

系统重构。就是在不改变软件的外部行为的基础上,改变软件内部的结构。使其更加易于阅读、易于维护和易于变更。

贯穿整个重构过程的是不断地測试。起初这样的測试是手工測试,随后逐渐转变为自己主动化測试。每改动一点点就进行一个測试,再改动一点点。測试。就是系统重构的保险索。

1.2 在保险索上走钢丝

重构的測试标准就仅仅有一个。就是与之前的功能全然保持一致。

QTP,Quicktest Professional的简称,是一种自己主动測试工具。使用QTP的目的是想用它来运行反复的手动測试。主要是用于回归測试和測试同一软件的新版本号。

一旦某个改动測试不通过。则还原回来。这样的一次一小步的改动模式,我们形象地称之为“小步快跑”。

1.3 大布局与小步快跑

大布局:全面地整理系统需求,全面地分析系统功能,再全面地设计系统、开发、測试。

这样一个过程往往会持续数月,花费大量的工作量。

系统重构应当避免大设计。而尽量採用一个一个连续不断的小设计。

这就是我们所说的“小步快跑”的设计模式。

小步快跑体现出了敏捷软件开发的特点——简单与高速反馈。

“两顶帽子”:一顶是仅仅重构而不新增功能,一顶是添加新的功能实现新需求。

另外一个问题就是及时反馈,落实到此地就是及时測试。

1.4 软件改动的四种动机

1. 添加新功能;

2. 原有功能有BUG。

3. 改善原有程序的结构;

4. 优化原有系统的性能。

现实世界有什么事物,这些事物都应当有什么行为。相互之间是什么关系,则我们在软件世界里就应当设计什么类、什么方法和它们之间的关联关系。

仅仅有这样的设计才是最易于为人所理解的设计,这就是“领域驱动设计”的思想。

为了有效提高软件的内部质量,我们在系统重构中应当做哪些事情呢?首先是提高软件的可读性,让它易于阅读;还有一件事情就是使软件易于维护、易于变更。

1.5 一个真实的谎言

需求变更才是我们去重构的主要动因。

当我们须要变更系统时,应该将变更的过程分为两个步骤:首先是不加入不论什么功能先重构我们的系统,使之适应新的需求。然后開始变更,实现新的需求。

“糟糕设计零容忍度”的策略,即先重构系统使之首先适应新的需求。再顺理成章去实现这些需求。

第2 章重构方法工具箱

2.1 重构是一系列的等量变换——第一次HelloWorld重构

等量变换。程序还是那些程序,运行的结果还是那些结果,但程序组织结构发生了变化,变得更加可读、可维护、易变更了。这就是重构的意义。

2.2 盘点我们的重构工具箱——对HelloWorld抽取类和接口

重构方法分为下面几个层次:方法的重构、对象的重构、对象间的重构、继承体系间的重构、组织数据的重构与体系架构的重构。

将通过凝视分段存放的各个代码段提取出来,形成单独的函数。这样的重构方法被称为“抽取方法”(Extract Method)。

第3 章小步快跑的开发模式

3.1 大布局你伤不起

3.2 小设计而不是大布局

重构过程中正确的标准是我们的软件是否保持重构前的外部行为,推断的方法则是測试,不论是手工測试还是自己主动化測试。

小步快跑让我们每次重构的时候仅仅关注一个问题。运用一个重构手法去解决这一个问题。

同一时候,它要求我们对远期的规划不要过细。

3.3 小步快跑是这样玩的——HelloWorld重构完毕

小步快跑是一种逐步进化式的程序优化过程,它是重构思想的重要核心。

第4 章保险索下的系统重构

4.1 你不能没有保险索

系统重构。从自身的定义上就把其代码正确性的验证方式描写叙述得十分明确,那就是“不改变软件外部行为”。

系统重构的測试能够从两个层面来进行:系统測试与单元測试。

4.2 自己主动化測试——想说爱你不easy

自己主动化測试不是银弹。并非全部代码都适合自己主动化測试。

还有一个不适合自己主动化測试的就是要訪问数据库的程序。由于它们运行的结果总是与数据库状态有关。无法获得稳定而能够不断复现的结果。

4.3 我们是这样自己主动化測试的——JUnit下的HelloWorldTest

4.4 採用Mock技术完毕測试

(本人微博:

topnav=1&wvr=5" target="_blank">http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426。欢迎关注。)

时间: 2025-01-08 14:04:56

我读经典(5):读《大话重构》迷你书有感的相关文章

读《人月神话》一书有感

<人月神话>是一本不可多得的软件工程方面的经典著作.作者是被誉为IBM 360之父的Frederick P. Brooks,他在此项目中担任项目经理.他也因此获得美国国家技术奖和计算机领域的“诺贝尔奖”-图灵奖. 我觉得本书语言风趣幽默又不失严肃严谨.尤其是在The Mythical Man-Month和Calling the Shot两章,诙谐的语句间穿插图表和数据,发人深思. 书中给我印象最深的是Brooks提出这样一条定律.“所有的程序员都是乐观主义者,他们倾向于认为事情会如他们想象的那

我读经典(6):读《文明之光》有感

什么是文明?如果突然问大家这个问题,那么你可能会不知如何回答,感觉这是一个只可意会但不可言传的概念. 在新书<文明之光>中,吴军老师为我们带来了答案.继<浪潮之巅>和<数学之美>之后,吴军老师又出力作<文明之光>,将世界各地的主要文明为我们一一呈现和讲解.整套书现在出了第一册和第二册,加起来一共有16章.在这16章中,作者基本按照时间的顺序,从最古老的古埃及文明讲起,一直到美苏在航天方面的竞争为止,为大家展示了一幅生动有趣的历史画卷.全书文笔流畅.语言优美.

我读经典(4):读《打造Facebook》有感

我第一次听说Facebook,是在用了国内的人人网很久之后.从上大学到研究生毕业,我几乎每天都要上人人网,发发日志.照片,看看其他同学有什么动向等等.个人感觉人人网使用起来非常的方便,拉近了人与人之间的距离,比QQ舒服多了. 某一天,我读到了一篇文章,主题是有关人人网的.文章里面说,人人网是中国的Facebook.这时,我便对Facebook产生了兴趣,接着上网去百度了一把,才知道它是全球最大的社交网络,于2004年2月4日正式上线,其主要创始人为美国哈佛大学的辍学生马克·扎克伯格(很有意思,比

大话重构连载16:超级大函数

事情总是这样的:当我们对一个遗留系统一忍再忍,再忍,忍,还要忍--终于积攒到某一天,实在忍无可忍了,拍案而起,不能再忍了,重构!!!事情就这样发生了.然而,在这时你突然发现,重构的工作千头万绪,真不知从何开始.堆积如山的问题此起彼伏,期望修改的设计思绪万千.这里有个想法,那里有个思路,什么都想做,却什么都做不了,真是脑子里一团乱麻.这时候,没有一个合理的步骤,清晰的计划,瞎干蛮干是十分危险的,它会为你的重构带来不可预期的未来.无数次的经验告诉我,不论是什么系统,采用什么架构,从分解大函数开始,肯

大话重构连载7:重构是一系列的等量变换

系统重构要求我们对代码的每一步修改,都不能改变软件的外部行为,因此在系统重构中的所有方法,都是一种代码的等量变换.重构的过程,就好像在做数学题,一步一步地进行算式的等量变换.经过一系列等量变换,最终的结果虽然在形式上与原式不一样,但通过计算可以得到与原式完全相同的结果. 这种等量变换对于重构来说非常重要,它使得我们进行重构以后,程序还是那些程序,代码还是那些代码.但是,等量变换不等于原地踏步.正如矩阵通过等量变换可以得到方程组的解,微积分可以通过等量变换计算最终的结果,重构通过等量变换,在保证代

大话重构连载1:遗留系统——软件工业时代的痛

我常常感到幸运,我们现在所处的是一个令人振奋的时代,我们进入了软件工业时代.在这个时代里,我们进行软件开发已经不再是一个一个的小作坊,我们在进行着集团化的大规模开发.我们开发的软件不再是为某个车间.某个工序设计的辅助工具,它从某个单位走向整个集团,走向整个行业,甚至整个社会,发挥着越来越重要的作用.一套软件所起到的作用与影响有多大,已经远远超越了所有人的想象,成为一个地区.一个社会,乃至整个国家不可或缺的组成部分.慢慢地,人们已经难以想象没有某某软件或系统的生活和工作会是怎样的.这就是软件工业时

大话重构连载:遗留系统——软件工业时代的痛

我经常感到幸运,我们如今所处的是一个令人振奋的时代,我们进入了软件工业时代.在这个时代里,我们进行软件开发已经不再是一个一个的小作坊,我们在进行着集团化的大规模开发.我们开发的软件不再是为某个车间.某个工序设计的辅助工具.它从某个单位走向整个集团,走向整个行业,甚至整个社会,发挥着越来越关键的数据.一套软件所起到的作用与影响有多大.已经远远超越了全部人的想象.成为一个地区.一个社会.乃至整个国家不可或缺的组成部分. 慢慢地,人们已经难以想象没有某某软件或系统的生活和工作会是如何的.这就是软件工业

大话重构连载首页

<大话重构>这本书是我写的第一本书,从今天起我将通过连载的形式逐渐跟大家分享. 这本书让你: 告别游击队转变为正规军. 远离劣质代码走向精妙设计 真正明确专业级的软件开发是如何的 真正明确重构是如何一步一步进行的 高效重构七步曲.面对实践不卡壳 让遗留系统维护不再是你的梦魇 读完这本书以后: 需求变更不再纠结.重构让你润物细无声地容纳它们 超越代码级的重构,从各个层面深度领略重构之美 自己主动化測试不再是梦想.重构让自己主动化測试走你 又一次审视熟悉而陌生的技术.将碎了一地的它们又一次铆合在一

大话重构连载5:软件修改的四种动机

软件,自从被我们开发出来并交付使用以后,如果它运行得好好的,我们是不会去修改它的.我们要修改软件,万变不离其宗,无非就是四种动机: 1. 增加新功能: 2. 原有功能有BUG: 3. 改善原有程序的结构: 4. 优化原有系统的性能[1]. 第一种和第二种动机,都是源于客户的功能需求,而第四种是源于客户的非功能需求. 软件的外部质量,其衡量的标准就是客户对软件功能需求与非功能需求的满意度.它涉及到一个企业.一个软件的信誉度与生命力,因此为所有软件企业所高度重视.但是,就在所有企业高管把软件外部质量