重构方法介绍:

重构改善既有代码的设计

一 重新组织函数

  • 关于注释 :要尽可能少的使用注释 , 注释越多代码的可读性反而更差,注释可以使用函数名来代替 , 不要管函数名有多长, 即使函数名比函数中的代码还要长也不要紧 ;
  • 提炼函数 : 整理函数, 使函数恰当的封装代码 , 函数可以有效的替换注释。太长的函数会包含大量的信息 , 代码的可读性变得很差, 而且注释会很多 ,每隔一段都要添加一行注释,这样可读性变得很差 。比如,我们在一个方法中相关的代码进行了注释 ,这里我们就可以将这些相关代码提取出来 , 封装到一个函数中, 使用函数名将这段代码想要执行的动作表达出来。这种手法叫做“提炼函数”。
  • 内联函数:与提炼函数相反的方法是“内联函数”,内联函数就是将函数中的代码替换到函数调用的位置。在提炼函数的过程中,函数的粒度太细,函数没有做实质性的东西,可以将函数还原到代码中。
  • 处理局部变量 :提炼函数最大的难题就是处理局部变量。一些简单的局部变量可以使用“以查询取代临时变量”来解决;对于那种多次复用多次赋值的变量,如果这个变量不是循环需要的变量,也不是用于统计结果的变量,变量的两次赋值没有关联,可以设置两个变量,分别替换复用的变量;对于更加复杂的局部变量,可以将方法提取成一个类,这是提炼函数的终极绝招。
  • 移除对参数的赋值:在函数中不要对参数进行操作,如果我们需要对参数操作,可以设置一个临时变量接收参数的值,对这个临时变量进行操作。
  • 替换算法:函数重新组织之后,如果发现算法可以经过改进,能更加明确的表明函数的意义,可以将这个算法替换;

二 在对象之间搬移特性

  • 功能模块归属类:对象设计中, 将一个功能模块放在哪个类中,是最重要的任务之一,谁也不能一开始保证设计的是完全合适的,这就需要“对象之间搬移特性”这个重构方法。
  • 搬移函数和搬移字段:这两种重构方法都可以解决大多数的问题,如果两种方法同时使用,先搬移字段,在搬移函数。
  • 提炼类和将类内联化:如果一个类承担责任过多,会变得臃肿不堪,这种情况下可以将一部分功能模块分离出去,提炼出另一个类;如果一个类的功能模块太少,这个类很小,可以将类内联化,将这个类合并到其它功能类似的类中。
  • 隐藏委托关系和移除中间人:当用户通过一个类调用另一个类时,要使用另一个类的功能的时候,为了实现更好的封装,可以隐藏委托关系,在服务端添加一个委托函数,使用户直接访问这个类,屏蔽用户对委托关系的了解;如果用户经常通过这个类访问其他的类,每个访问都要加上一个委托函数,如果这种过程过于复杂,我们可以将中间人移除,取消委托关系,与隐藏委托关系是相对的。
  • 引入外加函数和引入本地扩展:当我们想要将一个功能添加给类的时候,不能对该类进行操作,可以引入外加函数;当添加的功能很多的时候,可以将这些想要添加的功能放在一个类中,我们整体引入这个类,即引入本地扩展。

三 重新组织数据

  • 自封装字段 : 就是给类中的私有成员变量加上get , set方法 , 注意添加的get , set方法没有修饰符 , 要与下面的封装字段区分开 . 关于通过何种方法访问类中的数据 , 一直存在争议 . 可以先使用直接访问的方法来访问 , 如果出现问题 , 就通过函数在访问类中的字段 .
  • 以对象取代数据值 : 在编程过程中经常使用一个简单的数值表达某个概念 , 我们可以创建一个对象来表达这个改变 , 将哑的数据变成了善于表达的对象 , 可以使程序变得更优美 .
  • 以对象取代数组 : 如果发现一个数组的的行为方式很像一个数据结构 , 可以把数组变为对象 , 并添加该数组对应的行文方法 , 使数据结构更加清晰的显露出来 .
  • 魔法数 : 带有特殊含义的数字 , 应避免魔法数的存在 , 使用常量来代替魔法数 .
  • 单向关联和双向关联 : 类之间的关联就是在一个类中 , 定义一个另一个类的对象作为成员变量 ; 单向关联就是在一个类中存在另一个类的成员变量 , 另一个类中没有该类成员变量 ; 双向关联就是在两个类中同时存在另一个类的对象作为成员变量 .  单向关联的情况下 , 如果我们需要一个反向指针 , 例如客户和订单 , 我们需要知道一个客户有多少订单 , 同时又想知道这个订单属于哪个客户 , 这样我们就需要将单向关联转为双向关联 . 大量的双向关联会导致很多僵尸对象 , 一个对象已经没有用处了 , 但是有其它类中定义了改对象作为成员变量 , 这样我们就需要将这个双向关联改为单向关联 ;
  • 复制被监视数据 : 有时用户界面中会处理业务逻辑相 , 为了将业务逻辑移动到合适的领域类中 , 需要在领域类中保存业务逻辑相关的数据 , 这里的重复的数据时不可避免的 , 分层的优先级要大于数据重复 .
  • 封装字段,封装集合,以数据类取代记录 : 封装字段与自封装字段类似 , 但是又有所不同 , 给一个公共的成员变量添加get和set方法 , get和set方法的修饰符是public . 封装集合 , 对于集合的封装 , 应该尽量避免将整个集合暴露给用户 , 最好是将查询方法 , 添加 , 删除集合中的元素的方法暴露给用户 . 以数据类取代记录 , 在编程环境中有许多记录型结构 , 要想操作这些记录型结构就需要创建一个接口类 , 用来处理这些外来数据

【重构】重构概要--六大重构模块相关推荐

  1. 代码重构(二):类重构规则

    在上篇博客<代码重构(一):函数重构规则(Swift版)>中,详细的介绍了函数的重构规则,其中主要包括:Extract Method, Inline Method, Inline Temp ...

  2. 系统重构的原则代码重构的原则

    作者:[美]马丁•福勒(Martin Fowler) 译者:熊节, 林从羽 前一章所举的例子应该已经让你对重构有了一个良好的感觉.现在,我们应该回头看看重构的一些大原则. ##2.1 何谓重构 一线的 ...

  3. 【Java设计模式 规范与重构】 六 代码重构小结

    最近趁着学习劲头足,如饥似渴的把代码重构部分也学习完了,可以说9月份属实非常充实,貌似也只有学习才能导致生活没有那么无聊. 代码重构博客目录 序号 文章列表 1 [Java设计模式 规范与重构] 一 ...

  4. 代码重构(一):函数重构规则

    [笔记] 以下是通用的代码重构规则 python代码重构技巧看这里:Python重构代码的一些模式 ========================== 重构是项目做到 一定程度后必然要做的事情.代码 ...

  5. 【重构】一、重构的原则

    重构的原则 文章目录 重构的原则 0 什么是重构 两顶帽子 为什么要重构 重构改进软件的设计 重构使软件更容易理解 重构能帮助找到bug 重构提高编程速度 什么时候重构 预备性重构:让添加新功能更容易 ...

  6. 【重构篇js案例解析重构】第一章 重构的原则

    重构的原则 重构代码示例 重构前的代码 var plays = {"hamlet": { "name": "Hamlet", "t ...

  7. 重构是提高可测试性的主要手段 《设计模式》《代码重构》《从重构到模式》 《反模式》 重构时机 编写测试时候 修改BUG时候

    l重构是提高可测试性的主要手段 <设计模式><代码重构><从重构到模式> <反模式> 重构时机 编写测试时候 修改BUG时候

  8. .NET重构—单元测试的代码重构

    阅读目录: 1.开篇介绍 2.单元测试.测试用例代码重复问题(大量使用重复的Mock对象及测试数据) 2.1.单元测试的继承体系(利用超类来减少Mock对象的使用) 2.1.1.公用的MOCK对象: ...

  9. 代码重构之道,重构即重生,让你的代码起死回生

    本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:代码重构之道,重构即重生,让你的代码起死回生 | .Net中文网. 概述 有人曾经说过:不优雅的代码是对编译器的侮辱. 内容 科技美文 ...

最新文章

  1. 我们为你精选了一份Jupyter/IPython笔记本集合 !(附大量资源链接)-下篇
  2. 估值380亿美元!这家微软、谷歌、亚马逊都投资的AI初创公司什么来头?
  3. 市政管网检测机器人收费标准_泰州泰兴新街镇市政管道机器人检测怎么收费
  4. 数据结构之稀疏数组 - SparseArray
  5. python3爬虫初探(六)之EXCEL
  6. enum和enum class
  7. JS包含js文件 动态添加css
  8. Java生成png文件字体不清晰_java 文本图片字体模糊优化处理
  9. xmind思维导图怎么把字体变大_XMind 使用指南 | 让思维导图放大你的影响力
  10. 69. x 的平方根
  11. 射频芯片ATE测试从入门到放弃之收发机
  12. C# 获取某个时间的0点0分和23点59分59秒
  13. 微型计算机结构认识实验,实验一 微型计算机结构认识
  14. Ubuntu 下最好用的pdf阅读器okular
  15. 手把手教你用图灵机器人做微信公众号自动回复助手
  16. 钉钉可以手机和电脑同时登陆吗
  17. 《惢客创业日记》2021.06.21-22(周一)创业者融资成本有多高?
  18. [plugin:vite:import-analysis]Failed to resolve import “@/“ from ““.Does the file exist
  19. 【2019年05月13日】A股ROE最高排名
  20. Java面试:字节跳动+京东+360+网易面试题整理

热门文章

  1. PM Basic Skill---Communicate Plan
  2. 使用CEfSharp之旅(1) 加载网络页面
  3. SAS 对数据的拼接与串接
  4. iOS10系统下调用系统功能权限以及相关设置
  5. Uva5009 Error Curves
  6. 触发Full GC执行的情况 以及其它补充信息
  7. Python 网络爬虫 001 (科普) 网络爬虫简介
  8. MySQL 记录中包含换行符
  9. SharePoint 2013 REST 服务使用简介
  10. 第2章 基本的TCP套接字