博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《重构—改善既有代码设计》——第二章重构原则——学习笔记
阅读量:5965 次
发布时间:2019-06-19

本文共 1383 字,大约阅读时间需要 4 分钟。

1:什么是重构?

重构是一个过程:在不改变代码外在行为的前提下,对代码做出修改,以改进程序内部结构。本质上说,重构就是【在代码写好之后改进它的设计】

 

2:为什么要对项目进行重构呢?重构对软件开发有什么好处,

 

为什么要重构呢,打个贴切的比方:我平时比较 懒散,屋子里面的东西都是随手乱放,时间长了,屋子里面就乱七八糟了。有时候到了自己也忍无可忍的时候,我就要大动干戈了,把该放哪儿的东西都整理到哪 儿,该扔掉的东西全部扔掉。一个项目也是如此,有时候可能是设计不到位;有时候可能是经过多人的修改,代码凌乱不堪;甚至有些地方都是在堆砌代码;可能有 些新手写的代码或是自己以前写的代码,让你看不下去了…。于是你挥动大斧对项目进行劈砍一番。

 

重构的好处用自己的话简单的概括为: 改善软件设计、提高代码质量、提高程序可读性、减少错误、使以后功能扩展更容易。

 

【重构改进软件设计】

      大家可能都有亲身体会,一个项目的代码质量往往有可能会随着时间的推移变得越来糟糕,代码愈来愈雍窘,越来越难以理解它的本意。添加新功能越来越难。这里面的原因是多方面的,重构可以减少代码量,使以后的维护,开发更方便

【重构使软件更容易理解】

      重构整理过后的代码,确实让你更容易理解

【重构有助于你找到BUG】

      重构的时候,你必须去阅读代码,分析、理解逻辑,这样你就很可能发现一些逻辑或是简单的错误。而且重构的时候都要做一些必须的测试,也是有助于找到一些潜藏的错误的。

【重构有助于提高你的编程速度】

      这 个没有亲身体验过的人,估计只有一个形象的感受。我曾经参与到一个项目里面,那个项目简直到了你恨不得推翻它重写的地步。函数雍窘超长;代码到处堆砌;没 用分层;逻辑耦合;通篇没啥注释。有时候你为了了解这个函数的功能,都要花费大量的时间和功夫。用同事的话说:“对这些代码望而生畏”。你想这样一个代码 质量低劣的项目,做功能扩展、维护不拖累你的编程速度才怪。后来经过重构一部分代码后,才有所改善。

 

 

3: 什么时候重构?什么地方进行重构?

重构不应该特别划出时间进行,重构应该随时随地进行,不能为了重构而重构。而且我认为在在软件的生命周期里都要一直去重构,随时随地的重构。

 

三次法则(The Rule of Three)

第一次做某件事情时,只管去做;第二次做某件事件的时候,你可能会有些反感。但是你还是必须去做;第三次去做类似事情时,你就必须重构了。

具体到很细节的地方,作者提出了下面三条:

I         添加新功能时重构

II        修改错误时一并重构

III       复审代码时一并重构

 

3:重构难题:重构时需要注意什么地方?

自己根据自己的经验总结了以下一些地方:有时候重构需要花费你大量的时间去处理,而且你动作过大时,往往改动的地方、修改的代码量让你简直要抓狂!,所以作者提倡的小步小步的慢慢重构是个不错的建议;重构往往会带入一些BUG,呵呵,做什么事情都是要付出代价的。这方面往往靠细心、和必要的测试量来控制;修改接口; 难以通过重构手法修改设计。

4:何时不应该重构?

  ⑴当开发进入尾声的时候,这时候不应该重构,因为这时候重构往往得不偿失,可能会引入错误,而且涉及的改动让你痛苦不堪,还会拖累项目交付时间。这时候只能等产品交付客户使用后慢慢重构

  ⑵有时候项目太混乱,你重构花费的时间可能比你推翻重新开发还花费时间。

转载地址:http://avxax.baihongyu.com/

你可能感兴趣的文章
SilverLight:基础控件使用(6)-Slider控件
查看>>
Android写的一个设置图片查看器,可以调整透明度
查看>>
第 5 章 File Share
查看>>
判断字符串解析是JsonObject或者JsonArray
查看>>
[LeetCode] Implement strStr()
查看>>
多模块Struts应用程序的几个问题(及部分解决方法)
查看>>
1.2. MariaDB
查看>>
SpringSide示例之HelloWorld
查看>>
LINQ-to-SQL那点事~LINQ-to-SQL中的并发冲突与应对
查看>>
日志不说谎--Asp.net的生命周期
查看>>
C#~异步编程续~.net4.5主推的await&async应用
查看>>
C#进行MapX二次开发之图层操作
查看>>
ASP.NET 运行机制详解
查看>>
C++ little errors , Big problem
查看>>
iOS - Phone 电话
查看>>
根据点提取栅格值
查看>>
在 ML2 中配置 OVS vlan network - 每天5分钟玩转 OpenStack(136)
查看>>
Selenium2+python自动化34-获取百度输入联想词
查看>>
【★★★★★】提高PHP代码质量的36个技巧
查看>>
如何解决/home/oracle: is a directory报警
查看>>