近期。我在一个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技术完毕測试

(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426。欢迎关注。)

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

  1. 经典伴读_GOF设计模式_结构型模式

    经典伴读系列文章,不是读书笔记,自己的理解加上实际项目中运用,旨在5天读懂这本书.如果这篇文章对您有些用处,请点赞告诉我O(∩_∩)O. 如何使用设计模式抽象实例化过程.请参考<经典伴读_GOF ...

  2. 我读经典系列(一)《我读先秦诸子》易中天教授讲稿的简要摘录

    我读经典系列(一)<我读先秦诸子>易中天教授讲稿链接 以下是我的一些摘录: 公元前770年到公元前221年,是中国历史的春秋战国时期,这个时期社会矛盾激化,兼并战争连年不断,整个社会礼崩乐 ...

  3. 大话重构7:重构是一系列的等量变换

    毫无疑问,系统重构是一件如履薄冰.如坐针毡.你必须时时小心应对的工作,你就像走在钢丝上的人,每一步你都必需要保证正确,一个不经意的失误就可能让你万劫不复. 虽然如此,仅仅要你掌握了正确的方法.即使站在 ...

  4. 读985 读211 读省重点 读普本 到底有什么区别(深度好文,唤醒你的内心)

    读985 读211 读省重点 读普本 到底有什么区别 又是一年高考季,高考完之后最重要的事情就是填报志愿了,是不是你最大的苦恼就是不知道是清华好呢?还是要读北大呢?仿佛全世界就只要清北两所大学,好难做 ...

  5. 寻美下扬州,读诗,读城,读史

    寻美下扬州,读诗,读城,读史 --扬州研学2日营 古人赞美扬州的诗句皆成经典传世,"春风十里扬州路"."二十四桥明月夜"."夜市千灯照碧云" ...

  6. 读文献先读图——主成分分析 PCA 图

    上周五彩斑斓的气泡图 有让你眼花缭乱吗? 本周,化繁为简的PCA图 你值得拥有!  数据分析| 科研制图﹒PCA 图 关键词:主成分分析.降维 1665 年的鼠疫 牛顿停课在家提出了万有引力 ; 18 ...

  7. ReMILO:使用短读和长读的参考辅助错配检测算法

    ReMILO:使用短读和长读的参考辅助错配检测算法  鲍古德, 宋长进, 凌小兰 作者须知 Bioinformatics,第34卷,第1期,2018年1月1日,第24-32页,https: //doi ...

  8. Hybrid de novo tandem repeat detection using short and long reads 使用短读和长读的混合从头到尾串联重复检测

    背景 串联重复序列作为基因组重排研究的热点之一,对遗传疾病的遗传背景有着重要的影响.许多用于参考序列串联重复检测的方法获得了高质量的结果.但是,在de novo上下文中,没有可用的参考序列,串联重复检 ...

  9. 初谈SQL Server逻辑读、物理读、预读

    前言 本文涉及的内容均不是原创,是记录自己在学习IO.执行计划的过程中学习其他大牛的博客和心得并记录下来,之所以想写下来是为了记录自己在追溯的过程遇到的几个问题,并把这些问题弄清楚. 本章最后已贴出原 ...

最新文章

  1. Oracle动态采样学习
  2. python基础知识-11-函数装饰器
  3. 计算机基础算术加法,2011年自考计算机基础知识精选部分及答案(一)-2
  4. 打造史上最小尺寸.Net Core单文件应用程序
  5. 联想办公计算机,办公娱乐两不误!联想这些笔记本电脑不容错过
  6. C++远征之封装篇——类和封装、实例化和对象成员访问
  7. 【GIT 基础篇六】分支管理(创建与合并)
  8. 简述java异常机制处理,简述Java中的异常处理机制
  9. or计算机二级,计算机二级VF历年上机试题or答案
  10. CCNP精粹系列之四----OSPF(open short path first)
  11. 英语影响计算机专业,英语不好对于学习计算机编程来说到底有没有影响?
  12. 凸优化有关的数值线性代数知识 1矩阵结构与算法复杂性
  13. js解压gzip(解决RangeError: Maximum call stack size exceeded)
  14. Mysql添加报错 MySqlException: Incorrect string value: ‘\xE5\xAF\xBC\xE5\x85\xA5...‘ for
  15. BUG:Android开发模拟器运行出现Detected ADB对话框
  16. 从人工智能到人机智能
  17. 建房遮阳标准的计算机方法,农村建房遮阴计算标准,看看怎么计算?
  18. HTML 之 块级元素、行内元素和行内块元素之间的嵌套规则
  19. 数字图像处理与Python实现笔记之图像小波变换与多分辨率
  20. 已解决(Python读取xml文件报错)xmL.etree.ELementTree.ParseError:not well-formed (invalid token): Line

热门文章

  1. [论文阅读] ICCV2015 Joint Fine-Tuning in Deep Neural Networks for Facial Expression Recognition
  2. DirectX11--使用DirectX Tool Kit帮助开发
  3. 微信公众平台-测试号-测试接口的问题
  4. LSD(Line Segment Detector)直线提取算法
  5. 基数排序——多关键字排序(MSD/LSD)以及链式基数排序
  6. iOS开发者账号最新续费流程
  7. 如何在unity使用数据库
  8. Ionic3城市检索和滑动定位
  9. 世界经典电影Top 50
  10. 笔记本电脑桌面上计算机打不开怎么办,笔记本电脑开了机一直进不去桌面怎么办...