【重构.改善既有代码的设计】14、总结&读后感

14、总结

首先,这是一本太老的书,很多观点已经被固化或者过时了。但核心观点没有问题,虽然大多数观点已经被认为是理所当然的事情了。

重构的定义

重构分几种: 
1、狭义的代码重构 
  就是本书讲的,在不改变软件可观察行为的前提下,改变其内部结构。这就是完全不改变程序的功能,只是改变代码的组织方式,也就是只是整理代码而已,目的是优化代码架构,而不是优化行为、算法、逻辑或流程。

2、普通意义的重构 
事实上,我们一般很少会去做纯粹的重构,所以,了解了软件行为,从行为、算法、逻辑或流程上进行优化,,往往会更加能够选择更好的方法重构了,而且更加奏效。

3、重写 
有些时候,当代码已经比较腐烂时,重写是更好的重构方法,特别是功能单一的模块。 
比如我们18年刚刚借着优化的名字,把一个6万行代码的模块给重写了,效果杠杠的。

重构与设计的关系

简单设计与预先设计的关系:尽可能简单的预先设计。 
如果已经预测到软件会遇到某方面的变化,就必须在开始设计的时候考虑到这个变化会对代码造成的风险,使在变化发生的时候,能够方便的改动。 
也就是说,你可以不去实现那些变化,但是要保证以后可以方便的实现那些变化。

重构的目的

重构就想锻炼身体,让代码保持健康。

重构的目的是优化设计,设计优化后带来的好处: 
1、提高理解性 
程序主要是给人看的,而不是给机器看的。 
2、降低修改成本 
程序的维护时间比开发时间要长的多。 
所有逻辑都只在唯一的地点出现。 
3、提高编程速度 
--良好的设计是快速开发的基础。

重构的时机

1、小的重构 
随时可以开始,当现有代码让你难受时,就重构它。除非已经到了交付的末期。

2、大规模重构 
要项目统筹安排。

如何说服经理做重构工作

1、如果经理懂技术。那么说服他应该不难。 
2、如果经理不懂技术,但对质量感兴趣。先让他接受review的价值,然后把重构的意见放入review中。 
3、如果经理只关注进度(假装也关注质量,其实已经向进度妥协)。不告诉他,自己重构。

重构前的准备工作

小型重构 
1、构建自动测试系统,保证重构安全

大型重构 
1、把它分成多个模块,分块重构。 
2、整个团队都必须意识到:有一个大型重构正在进行,不能让其他人把你的重构成果破坏了。

重构开始前需要明确的原则

1、重构不能损失功能,要有测试用例保证。 
2、重构要与增量开发隔离,以保证随时可以回退。 
3、要小步快跑,完成一块重构,就立刻跑过测试用例,然后闭环此部分重构。 
4、如果某次重构后,用例不通过了,只花一小点时间定位,解决不了,立刻回退。

重构的安全保障

安全应该有两层含义:1、代码安全;2、你自己的安全。

所谓「安全重构」(safe refactoring)就是不会对程序造成破坏的重构。由于重构的意图就是在不改变程序行为的前提下修改程序结构,所以重构后的程序行为应该与重构前完全相同。

如何进行安全重构呢?你有以下数种选择: 
· 相信你自己的编码功力。 
· 相信你的编译器能捕捉你遗漏的错误。 
· 相信你的测试套件(test suite )能捕捉你和编译器都遗漏的错误。 
· 相信代码复审(code review)能捕捉你、编译器和测试套件(test suite )都遗漏的错误。

Martin 在他的重构原则中比较关注前三个选项。大中型公司则常常以代码复审作为前三个步骤的补充。

但,百密一疏,重构是人为的动作,人不可能万无一失。所以,如果你无法承担错误的后果,就不要重构了。

重构的方法

现在已经经过层层思考,决定要重构了。

1、发现代码的坏味道 
  简单的,可以通过工具发现 
  复杂的,则要靠自己发现了

2、不停地重构一块块坏的代码 
重构的各种方法,文中已经列出了,但看过不等于会用,只有日积月累的勤学苦练,才能有信心面对各种复杂的情况————学会所有的招式,才能无招胜有招。 
张三丰较张无忌学太极拳,也是先学会所有的招式,然后忘掉,做到的无招胜有招。 
有些人那些学了思想,就声称掌握了这门技术,往往是眼高手低罢了。

设计模式为重构提供了目标。

文中方法的缺点:不适用于并发式、分布式环境。

重构,复用与现实

为什么开发者不愿意重构他们的程序? 
重构的好处是显而易见的,但这只是开发者的梦想,那么让梦想进入现实: 
为什么还不肯重构你的程序呢?有几个可能的原因: 
1. 你不知道如何重构。 
2. 如果这些利益是长远(才展现)的,何必现在付出这些努力呢?长远看来,说不定当项目收获这些利益时,你已经不在职位上了。 
3. 代码重构是一项额外工作,老板付钱给你,主要是让你编写新功能。 
4. 重构可能破坏现有程序。 
5. 如果你不是代码的唯一owner,怎么办? 
6. 如果代码有多个分支,怎么办?

1、4可以技术解决,但2、3就到了人性层面了,尤其是当领导不支持的时候,坚持重构可能会让自己伤痕累累。

重构的难题

1、数据库 
难点在于数据层与业务层耦合、数据迁移。 
解决办法:加分隔层、

2、修改对外接口 
这不是狭义重构允许做的,但有时你会修改接口。 
解决办法: 
接口共存,旧接口调新接口,直到确认旧接口没有再被调用了。 
不要过早的发布接口。

重构与性能

保证软件性能的方法: 
1、时间预算法。从开始就监控时间,分解每个组件允许耗费的时间,永远不允许其超过这个时间限制。这个是在对系统实时性要求非常高的软件中使用。 
2、持续关切法。要求程序员任何时刻持续不断的关切新开发的代码,已保证性能。这个很难做到全面。 
3、重点关切法。一般用的就是这个。类似二八原则,但这个更甚,估计要超过一九原则。90%的优化工作都是徒劳的,只有10%的优化工作是真正解决90%以上问题的。所以,把优化的重点放在这10%工作上。首要的问题,就是如何发现性能拼接在哪里?必须使用检测工具,而不是臆测,臆测的一般是错误的,会让你投入大量的时间到徒劳的工作部分。

原文地址:https://www.cnblogs.com/aoyihuashao/p/10389763.html

时间: 2024-10-10 03:00:19

【重构.改善既有代码的设计】14、总结&读后感的相关文章

《重构——改善既有代码的设计》读书笔记

重构--改善既有代码的设计 1 重构概述 1.1 重构的概念(What) Refactoring 名词:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低修改成本. 动词:使用一系列重构方法,在不改变软件可观察行为的前提下,调整其结构. 1.2 为什么要重构(Why) 改进软件设计 提高代码质量和可读性,使软件系统更易理解和维护 帮助尽早的发现缺陷 提高编程速度 1.3 何时重构(When) 何时重构: 1)随时随地进行. 2)三次法则:第一次做某件事只管去做:

《重构——改善既有代码的设计》【PDF】下载

<重构--改善既有代码的设计>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196358 编辑推荐 重构,一言以蔽之,就是在不改变外部行为的前提下,有条不紊地改善代码.多年前,正是<重构:改善既有代码的设计>原版的出版,使重构终于从编程高手们的小圈子走出,成为众多普通程序员日常开发工作中不可或缺的一部分.<重构:改善既有代码的设计>也因此成为与<设计模式>齐名的经典著作,被译为中.德.俄.日等众多语言,

《重构--改善既有代码的设计》总结or读后感:重构是程序员的本能

此文写得有点晚,记得去年7月读完的这本书,只是那时没有写文章的意识,也无所谓总结了,现在稍微聊一下吧. 想起写这篇感想,还是前几天看了这么一篇文章 研究发现重构软件并不会改善代码质量 先从一个大家都有的经历说起吧. 刚开始学编程时,比如,要统计数字出现的次数,我们会这么定义变量 int i=0;//统计次数 老师看了说,代码要有可读性,见名知意; 于是,我们把它改成 int count=0; 后来才知道,原来这么一手这就是重构的第一式,重命名 (eclipse快捷键 alt+shift+R,最近

【转】PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数

原文地址: PHP 杂谈<重构-改善既有代码的设计>之一 重新组织你的函数 思维导图 点击下图,可以看大图. 介绍 我把我比较喜欢的和比较关注的地方写下来和大家分享.上次我写了篇<php 跟老大的对话>.还是有很多疑问,这书帮了我不少的忙. 如果你比较繁忙,或者懒得看文字,建议你直接看截图,也会有很大的收获的.你可以通过比较截图中的代码就能知道孰优孰劣了. 代码部分我为什么用图呢?因为我经常用手机看代码,博客园的代码在手机里乱七八糟的,还是看图比较舒服. 专业术语 我们毕竟是用英文

重构改善既有代码的设计思维导图

最近闲来无事就把之前看的书,做了一张张的思维导图,来分享给大家 重构改善既有代码的设计思维导图: --------------- 不知道是博客园的问题,还是我的浏览器的问题,图片没法上传,如有人想要想看 可以给我发邮件: [email protected]  只为共同学习.也可以留言!!!

好书推荐之:重构-改善既有代码的设计

下载地址 高清 1.3M 重构-改善既有代码的设计 版权声明:本文为博主原创文章,未经博主允许不得转载.

实践提高《重构改善既有代码的设计第2版》PDF中文+PDF英文+对比分析

重构是编程的基础,是在不改变外部行为的前提下,有条不紊地改善代码.编程爱好者都知道,Martin Fowler 的<重构:改善既有代码的设计>已经成为全球有经验的程序员手中的利器,既可用来改善既有代码的设计.提升软件的可维护性,又可用于使既有代码更易理解.焕发出新的活力. <重构改善既有代码的设计(第2版)>在第1 版的基础上做了全面修订,反映了编程领域业已发生的许多变化.第2 版中介绍的重构列表更加内聚,并用JavaScript 语言重写了代码范例.此外,第2 版中还新增了与函数

《重构-改善既有代码的设计》读书笔记

重构,第一个案例 1.1 起点 如果发现现有的代码结构使你无法很方便地添加新特性,那就先重构,使特性的添加比较容易进行后,再添加特性; 1.2 重构的第一步 为即将修改的代码建立可靠的测试环境 – 是人就会犯错,所以需要可靠的测试; 测试结果能够自我检验 – 成功"OK",失败列出失败清单并打印行号 (自动化对比测试结果是提高效率的前提); 1.3 分解并重组"巨型"函数 切分提炼长函数(Extract Method),并移至更合适的类(Move Method) –

重构-----改善既有代码的设计

1重构原则 1.1 定义: 1).调整软件内部结构,目的是在不改变软件软件可查行为前提下,提高其可理解性,降低其修改成本. 2).使用一系列重构准则,在不改变软件可查行为前提下,调整其结构 1.2 何时重构 1).三次法则 2).添加功能时 3).修补错误时 4).复审代码时 1.3 何时不该重构 1).代码太乱,重构效率低于重写效率时 2).项目接近期限时停止重构 2.代码的坏味道 2.1 Duplicated Code 2.2 Long Method 2.3 Large Class 2.4