重构是安全地改善既有代码设计的一门艺术.有以下几种含义:

  • 重构并不包括对系统的所有修改.如果修改是对设计的改善, 或是增加新的功能, 则均不能被认为是重构. 例如, 极限编程(XP)使用了测试驱动开发(TDD), 这包括先编写一个测试, 然后编写新代码引入新的特性, 最后再重构以改善设计.
  • 重构并非从头开始重新编写. 重构可以改变平衡点, 从而有可能改善代码, 而无需承受重新编写的风险.
  • 重构并不仅仅是用于改善代码的某种结构更改. 重构(refactoring)和更改结构(restructuring)的区别. 重构力图达到一种安全的转换. 如果所做的修改使得代码在超出一个工作期时就无法正常工作或运转, 那么不能这种修改是重构.
  • 重构会改变预先设计(up-front design)和紧急设计(emergent design)之间的平衡点. 预先设计是在实现之前所完成的设计; 而紧急设计则是在实现之中进行的设计.重构可以降低紧急设计方法的开销和风险.
  • 重构规模可大可小. 许多重构规模都很小.

坏味道(smell),特别是代码坏味道(code smell),是一些指出代码中潜在问题的警示信号。并非所有坏味道所指示的都确实是问题,坏味道可以称作是潜在问题(potential problem)或缺陷(flaw)。坏味道往往描述的是局部性问题。

转载于:https://www.cnblogs.com/icejoywoo/archive/2011/03/30/1999438.html

重构手册阅读笔记:重构的含义相关推荐

  1. sed 手册阅读笔记转

    原文链接sed 手册阅读笔记摘要sed 手册本身不太适合初学者,我在看的过程中加了一些 自己的注释和一些例子,帮助理解,如有偏差或错误,请指出,多谢.目录1. sed的工作原理 2. sed中如何选择 ...

  2. 14015.xilinx-芯片手册阅读笔记

    文章目录 1 xilinx芯片手册阅读笔记 1 Introduction 介绍 1.1 System Block Diagram 系统框图 1.2 Power Domains and Islands ...

  3. Xilinx AXI USB2.0 Device IP 手册阅读笔记

    目录 1. 前言 2. 概要 2.1 USB2.0协议特点: 2.2 The AXI USB 2.0 Device介绍 2.2.1 Endpoint0: 2.2.2 Endpoint1~7: 3. 详 ...

  4. 重新组织函数--《重构》阅读笔记

    1)寻找引用点时,最好使用工具,然后再人工review.在看到这个问题的时候,我估计应该是很久之前了.现在用IDE.这个要方便很多. 2)重新组织函数的方法和目标. 其实目标很简单.就是消灭长函数. ...

  5. Java开发手册阅读笔记

    <Java开发手册>阅读理解,抛砖引玉 前言 最近开发一个项目,由于是第一次搞开发没什么经验,由于在编码上没有什么约束,完全依靠idea的自动提示,在后期重构和开发时带来了一些麻烦,而且代 ...

  6. 1505_TC275参考手册阅读笔记_调试系统

    全部学习汇总: GitHub - GreyZhang/g_TC275: happy hacking for TC275! 继续看参考手册中芯片介绍的部分,这一次看一下调试系统.其实,在之前看其他的文档 ...

  7. USB2.0官方协议手册阅读笔记(2)——数据流模型

    目录 1. 前言 2. 总体介绍 3. 重点介绍 3.1 总线拓扑 3.1.1 Host and Device 3.1.2 Physical Bus Topology 3.1.3 Logical To ...

  8. USB2.0官方协议手册阅读笔记(1)——总体介绍

    目录 1. 前言 2. 总体介绍 2.1 USB特性 2.2 速率模式 2.3 拓扑结构 2.4 物理结构 2.5 总线协议 2.6 USB Device 2.6.1 Hubs 2.6.2 Funct ...

  9. 现代php 阅读笔记,PHP 手册阅读笔记 - 语言参考篇

    最近计划把 PHP手册,认真的先过一遍.记录一些以前不知道,不明确的知识. 语言参考 > 类型 [新认知]强制转换类型用 settype( mixed $var, string $type ). ...

最新文章

  1. E20180525-hm
  2. SVD原理及其应用导论
  3. 再谈RDD、DataFrame、DataSet关系以及相互转换(JAVA API)
  4. html input日期值,input标签设置时间值
  5. MTK驱动开发(44)---如何对GPS下达清除辅助资讯的command
  6. c语言列出1~100所有素数_一次找出范围内的所有素数,埃式筛法是什么神仙算法?...
  7. 机器视觉——IC芯片字符检测打光实例
  8. 3-20 标准库:find库; 学习编程语言3节课(大多是旧识,全*栈)3-21 面向对象. Percent Strings; 元编程和Rails的相互理解...
  9. Confluence 6 配置草稿保存的时间
  10. qq视频转码失败怎么办_教程:如何下载舞蹈视频里面的音乐?
  11. python输出内容到终端的函数_如何通过Python函数运行的可执行文件的终端输出以一般方式静音?...
  12. 如何彻底卸载3dmax2020_3DMAX 2020安装失败,怎么把3DMAX 2020彻底卸载删除干净重新安装?...
  13. 解决Mac无法识别移动硬盘以及无法识别BootCamp Windows分区的问题
  14. 文物摄影中白平衡的正确设置(图)
  15. 利用python进行假设假设检验
  16. 神州信息与瀚华金控签署战略协议 共推数字普惠金融
  17. 理解 alter table nologging
  18. 目前最精准的Android开源计步器
  19. css3动画与过渡效果结合出现的树叶飘落效果
  20. 华为HCNA之SNMP基础配置实验

热门文章

  1. LeetCode —— 365. 水壶问题(Python3)
  2. leetcode —— 1025. 除数博弈
  3. 一维数组转化为二维数组(java)
  4. 如何将多个文本数据转化为指定数据格式[以电影数据为例](数据预处理)
  5. python发动机曲轴连杆动力学计算
  6. Android Studio连接手机没反应,提示错误adb.exe start-server' failed -- run manually if necessary
  7. linux ftp 登录慢,linux中vsftpd登录,上传下载文件慢解决办法linux操作系统 -电脑资料...
  8. [git 基础] 生成patch 和 打patch 的实例
  9. jq获取 html元素节点,jQuery 获取当前节点的html
  10. python打印一个对象的所有属性_python打印出所有的对象/模块的属性代码详解