读书笔记--《大话重构》

       整体鸟瞰
       最近小编读了一本书,叫做《大话重构》,这本书运用大量源于实践的示例,从编码、设计、组织、架构、测试、评估、应对需求变更等方面,深入而多角度地讲述了我们应该如何重构,建设性地提出了高效可行的重构七步。读完本书,实践重构不再卡壳,需求变更不再纠结。全面领悟重构之美,遗留系统不再是梦魇,自动化测试原来可以这样做。本书帮助程序员告别劣质代码步入精妙设计,让遗留系统的维护者逐步改善原有设计,指导重构实践者走出困惑步步坚定。同时,也为管理者加强软件质量的管理与监督,提供了好的方法与思路。
本书的最大价值在于两点: 
  一,让读者明白真正的专业级软件开发是如何进行的; 
  二,让读者明白真正的重构具体是一步步怎么做的。 
  作者范钢老师将繁复冗长模糊不清的软件重构过程划分成明确而清晰的七个步骤。使初学者在面对实际中的软件重构时,不会卡壳。 
  这本书所讲解的重构远远超越了代码级,充分渗透到软件系统与设计的各个层面,涵盖从代码、函数、类与对象,直至设计模式、分层架构、领域模型、软件测试的整个过程。 

  我们听过或许没有听过那些术语和概念,多少明白或完全不明白的技术和方法,知道却没用过或完全不知道的工具和软件,这些之前各玩各的的独立散碎,在这本书中被榫卯成一个强韧的整体。你会明了它们中每一个的作用,应被安插到的位置,并见识它们各就各位时所发挥出的能量。头脑从未有过的清醒,我们理解了以前所不理解的,今天这篇博文,小编就来简单的介绍一下大话重构的故事,为什么小编会有一种大话西游的感觉呢?`(*∩_∩*)′

                       

       何为重构?
       要想理解重构首先要充分的理解重构的定义。重构(Refactoring)就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。
      重构的定义:对软件内部结构的一种调整,目的是在不改变”软件之可察行为“前提下,提高其可理解性,降低其修改成本。重构就是在代码写好之后改进它的设计。重构和添加新功能并不冲突,但是当开发者身份在两者之间切换时候,不能混淆在一起。

       重构,是一把双刃剑,开发人员不要轻易使用。举个例子来说,你现在正在从事某个行业的工作,但有人告诉你另外一个行业赚钱多而且快,于是你就很纠结,到底要不要改行呢?不改行吧,钱挣得少;改行吧,自己又是新手,对那个行业又不熟悉。这种心理状态其实就是开发人员对于重构的态度,可以用“进退维谷”来形容。 

                     

       为什么要重构?

      由于原程序结构不能满足用户的新需求、原程序有漏洞(bug)、原程序执行效率低下,性能不足以满足用户要求。所以要而且必须要进行重构。但是重构不能随随便便的进行重构,重构是要按照一定的原则来进行的,重构的原则:小步快跑(一次一小步的修改模式,每次修改一点点进行一个测试,再修改一点点再测试);两顶帽子(一顶是只重构原代码而不增加新功能,一顶是增加新功能以实现新需求)。

        一个软件总是为解决某种特定的需求而产生,时代在发展,客户的业务也在发生变化。有的需求相对稳定一些,有的需求变化的比较剧烈,还有的需求已经消失了,或者转化成了别的需求。在这种情况下,软件必须相应的改变。
考虑到成本和时间等因素,当然不是所有的需求变化都要在软件系统中实现。但是总的说来,软件要适应需求的变化,以保持自己的生命力。
       这就产生了一种糟糕的现象:软件产品最初制造出来,是经过精心的设计,具有良好架构的。但是随着时间的发展、需求的变化,必须不断的修改原有的功能、追加新的功能,还免不了有一些缺陷需要修改。为了实现变更,不可避免的要违反最初的设计构架。经过一段时间以后,软件的架构就千疮百孔了。bug越来越多,越来越难维护,新的需求越来越难实现,软件的架构对新的需求渐渐的失去支持能力,而是成为一种制约。最后新需求的开发成本会超过开发一个新的软件的成本,这就是这个软件系统的生命走到尽头的时候。
重构就能够最大限度的避免这样一种现象。系统发展到一定阶段后,使用重构的方式,不改变系统的外部功能,只对内部的结构进行重新的整理。通过重构,不断的调整系统的结构,使系统对于需求的变更始终具有较强的适应能力。
重构可以降低项目的藕合度,使项目更加模块化,有利于项目的开发效率和后期的维护。让项目主框架突出鲜明,给人一种思路清晰,一目了然的感觉,其实重构是对框架的一种维护。

       总的数来,对于程序来说,重构就相当于做一次大的手术,因此一定要认真对待。贯穿整个重构过程的是不断地测试、测试、再测试。我们需要不断地实践才能够对整个重构的流程得心应手。因此从“小步快跑”和“两顶帽子”两个重要的重构思想,再到系统重构六步骤:分解大函数、拆分大对象、提高代码复用率、发现扩展点、减低依赖度、分层,这些都是重构很重要的部分。在重构时要放弃大布局,采用小设计。这种说法很有意思,感觉有点不符合我们平时正常的思维习惯,错误发现得越早就越利于修正错误。如果布局太大,错误被发现的可能会越迟,这样修正起来也更加复杂。重构时如果步子走的太大,其实花费在设计上面的时间也越多,开发周期也越长。因为考虑的太多,会导致各种各样的问题出现。 所以采用小步快跑的方式来进行重构,由于每次只关注其中的一部分功能,这样不论从设计还是开发,测试的角度来说,都是非常有利的。因为我们采用的是"小步快跑"的方式去重构,即使中间我们犯了一些错误,还是非常容易地被发现,修正。这极大的减少了我们的工作量。

        

                   

       什么时候重构?
      重构是一种习惯,一种编程习惯。这种习惯让我们迅速由菜鸟转变为大牛,可以编写出高质量、优秀的程序。问题的关键就是降低修改成本与风险的方法,而这个方法就是系统重构。走出重构的第一步对每一个人来说都是一次心灵的考验,甚至许多人总是徘徊于路口踌躇不前,但一旦跨出去了,它将成为你生命的一部分。
      没有经过重构的,原生态的代码是没办法复用的,当我们发现代码需要复用时,切忌不要使用过去那种简单粗暴的复制黏贴,合理运用重构方法,加之以仔细、认真、即时的测试,就可以保证既有代码的正确,并使整个系统合理地复用起来,以提高系统的可维护性,关键是你有没有这样的意识。
        添加新功能前线重构原系统,其目的有两个:
        a、 软件的设计总是与软件的复杂度有关的,原有的设计师在原有需求不复杂的条件下做出的,但随着新功能的加入,软件复杂度在发生着变化,因此必须调整原有的设计。
        b、为了提高软件的可维护性与易变更性,添加新功能应遵循OCP原则。系统重构是我们维护处高质量遗留系统的有效工具。

       在紧急变更任务中,时间就是金钱,我们要用最省时省力的方法解决问题,这里的差别就是怎样去重构?——做完整的设计, 但只做重构中最紧急的部分。

                   

       如何重构?
       第一步:从分解大函数开始 随着业务逻辑越来越复杂,程序员总是就着原有的程序结构不断的添加新的代码。原有的清晰而简单的程序,随着新代码的不断添加,因此,大多数软件企业的遗留系统中,超级大函数就变成了一种通病。因此重构的第一步就是要从分解大函数开始。所以寻求一个系统的切入点,归纳整理大函数的各司逻辑,运行重构"抽取方法"进行函数分解化为多个不同逻辑的函数,从而优化原有的系统结构,提高了阅读的方便性。
       第二步:拆分大对象,分解了大函数,滞留的是被分解的上百上千的方法或函数,接下来就是对大对象的分解。利用重构”抽取类”将分解的函数或方法进行整合至对象中,同时保证单一职责原则,一个对象或类完成一项业务逻辑职责。最后进行类的归并。
       第三步:提高代码复用率 分解过大函数、拆分大对象,系统重构从无序的乱码变得有序井然,系统的逻辑流程也清楚明白,接下来做的就是对代码的优化,遵循”DRY”原则,同一对象中存在重复逻辑代码,运用”重构方法”抽取为对应的逻辑名函数;不同对象中村子啊重复逻辑代码,运用”抽取类”将重复部分抽取为一个公用类,方便其他类调用。当重复的所在类具有并列关系,运用”抽取父类”将相同代码抽取为共有的父类。
       第四步:发现程序可扩展点 系统能应对业务多变的需求变更,提高系统的易变更性,也是重构系统的目的之一。系统应保证一般性原则:预见性可扩展设计尽量不要太多;”两顶帽子”设计模式—一顶是系统重构,一顶是面对新需求实现功能。遵循”OCP原则(开放-关闭原则)”也是可扩展点的前提根本。
       第五步:降低程序依赖度 降低系统的依赖度是重构系统的最根本方法。减少功能逻辑之间的联系度,新需求建立独立的功能逻辑,满足了系统功能的耦合度,达到了系统开发低耦合高内聚。
       第六步:分层 分层结构是系统开发前期所设计的系统架构,默认的架构是三层架构:数据层、业务逻辑层、应用层。分层的意义在于独立各功能逻辑关系,在面对业务需求变更时,以改变原逻辑最小的代价,提高了系统代码质量。

      第七步:领域驱动设计:按照职责原则对系统进行领域划分形成领域模型。原程式结构与现程式结构大相径庭,并不是抛弃原有系统结构,只是通过”小步快跑”一点一点的演变而来,再次保证代码的质量水平和阅读、维护、变更。这就是重构的完整过程。

      小编寄语:该博文,小编简单的介绍《大话重构》,博文分别从,整体把控整本书、何为重构、为什么要重构、什么时候重构、如何重构五个方面进行归纳总结,重构的重点,不在于如何重构,而在于重构释义过程的美学显现。

               

时间: 2024-11-01 13:28:20

读书笔记--《大话重构》的相关文章

《职场动物进化手册》读书笔记

前看过<职场动物进化手册>,但是一直没有将http://www.aliyun.com/zixun/aggregation/9752.html">读书笔记整理出来.下面只是我的一些小感想,欢迎指正. 对主管而言: 如同自然界的动物一样,任何员工都有自己的存在价值,也都在为生存而相互争斗: 主管最重要的是保持系统的 稳定,尽可能发挥各自的特长: 内耗是不可避免的,但是是可以降低的: 内耗减少,就可能因为缺少平衡而风险加大: 珍视缺乏政治头脑的动物,保护他们的热情,但是也需要 防止他

《隐婚男女》北京再演交出职场相恋手册(组图)

<隐婚男女>重磅开演 <隐婚男女>主创齐聚 新浪娱乐讯 有关于职场相恋当隐不当隐的李伯男导演作品<隐婚男女>历时一年时光,巡演24城回归北京,将于2月23日在人艺实验剧场再度开演.鉴于李伯男导演新戏已经开始了紧锣密鼓的筹备工作,本轮也将是该剧本年度在北京的最后一轮献演,再为全城观众献上职场相恋手册,给力支招.努力不"添堵". 那么多人又爱了又离了,那么多人曾经指天明誓的对世界宣告最初爱的开场曲,若隐瞒一旦开始,这一段曾经指望对彼此忠诚到老的感情藏匿何

白领热捧职场圣经不败之书满足心理需求(图)

资料图片资料图片 白领热捧"职场圣经" 借鉴论 教人怎么揭开办公室幕后江湖.身处不败之地的"职场书",满足了白领心理上的安全需求. 混迹职场,不少白领手头都装备了一部或者数部职场"宝典","去年毕业前,我就去书城买了一本<杜拉拉升职记>回来仔细研读,看主人公对职场各种漩涡见招拆招,增长一些见识,也好对即将开始的生活找一点安全感."工作一年的"菜鸟"元媛告诉记者,多数年龄相仿的"85&q

《进化——我们在互联网上奋斗的故事》一一1.4 从精兵到强将 ——技术人员的职场发展之路

1.4 从精兵到强将 --技术人员的职场发展之路 进化--我们在互联网上奋斗的故事 因兴趣而进入互联网行业 2000年,踏着世纪交替的步伐,我走进入了西北工业大学,学习航空飞行器动力专业而不是计算机专业.在入学之前,我就对计算机有不小的兴趣,进入大学后经常去学校图书馆或实验室上网,对计算机的兴趣越来越浓厚,就去图书馆找一些网页设计.网页特效等书籍学习并动手做一些练习.之后我就很喜欢用263的邮箱,因为它的邮箱支持自定义网页格式,我可以给同学和朋友发送自己设计的个性化的网页格式E-mail.那时很

《Excel 职场手册:260招菜鸟变达人》一导读

前 言 Excel 职场手册:260招菜鸟变达人 2015年4月,我人生中的第一本书<Excel高手捷径:一招鲜,吃遍天>出版了.出版后的第一个月在当当网计算机新书热榜排名第一,这让我感到很意外.出书后向我请教问题的人更多了,不仅仅是腾讯内部的同事,还有公司外面的粉丝.在帮助大家解决问题的过程中,我钻研了更多的技巧,更加深刻地体会到Excel的博大精深.我特别想把这些技巧分享给大家,因此,两年后我准备再版.在此特别感谢腾讯公司以及老东家江西移动的领导和同事们对我的大力支持,感谢我的亲朋好友以及

《Excel 职场手册:260招菜鸟变达人》一第一篇 数据操作与处理

第一篇 数据操作与处理 Excel 职场手册:260招菜鸟变达人本篇讲解单元格数据录入与编辑以及整理.查找与替换.行与列.工作表和文件等方面的操作技巧,主要内容包含快捷键的功能介绍.特殊数据的录入技巧.查找替换.条件格式.数据有效性定义.自定义单元格.合并单元格取消后快速输入空白区域.文本与数字格式的相互转换.工作表以及工作表标签的显示与隐藏.工作表和工作簿的保护.Excel文件减肥瘦身秘诀.Excel文件打印技巧等.

《Excel 职场手册:260招菜鸟变达人》一第1章 单元格数据录入与编辑

第1章 单元格数据录入与编辑 Excel 职场手册:260招菜鸟变达人本章介绍单元格数据录入与编辑技巧,主要内容包含快捷键(组合键).特殊数据的录入技巧.数据验证.快速填充.合并单元格取消后快速输入空白区域等.

小小指纹膜折射职场众生相

对于公司来说,打卡机就是用来严格约束员工考勤制度的"紧箍咒".然而上有政策下有对策,如今网上热销的一款指纹膜却成为一些上班族的秘密武器.     "以后除非老板天天守着那考勤机,不然休想扣咱辛辛苦苦挣的那么点工资."--这是很多使用指纹膜的上班族的共同心声.尽管屡试不爽成功骗过考勤,可一旦被识破,不但丢了面子.扣了工资,严重者还将落个被炒鱿鱼的下场.一款小小的指纹膜,折射出喜.怒.哀.愁的职场众生相.     喜 金蝉脱壳防迟到     天气越发寒冷,让家住沈阳铁西

《UML及建模》读书笔记

<UML及建模>读书笔记     (一)面向对象技术概述   一.软件及其特性 软件是计算机系统的思维中枢,是软件产业的核心.作为信息技术的灵魂--计算机软件,在现代社会中起着极其重要的作用. 概念: 软件是计算机系统操作有关的程序.规程.规则及其文档和数据的统称. 程序是按事先设计的功能和性能要求执行的语句序列.数据是程序所处理信息的数据结构.文档是与程序开发.维护和使用相关的各种图文资料,如规范说明书.设计说明书.用户手册等. 软件由两部分组成:一是机器可执行的程序和有关的数据:二是与软件

升为领导十大忌 职场百悟大之六

进入职场3--5年后,可能你会因优异的表现,晋升个部门领导,这时候千万不能得意忘形,失去了做人的原则.我没学过什么企业管理MBA之类的课程,我当领导后要求自己的唯一标准就是:过去我希望领导怎样对我,我就应该怎样对待我的下级,除此之外,我还对当好领导总结有以下十忌:   忌自己做不到的事推给下级去做 我没当领导时,我的领导如果让我看出来他做不到的事情让我做,我会很瞧不起他,他说什么我都即使表面上不说,心里也不服,心想:你干不了的事让我干,你不配当我领导,当了个让下级瞧不起的领导又有什么意义呢? 我