首页 > 其他分享 >重构:改善既有代码的设计 第三章 读书笔记

重构:改善既有代码的设计 第三章 读书笔记

时间:2022-11-25 10:57:56浏览次数:44  
标签:重构 第三章 函数 读书笔记 重复 数据 代码 参数 Data

目录 代码的坏味道

3.1 神秘命名(Mysterious Name)

  需要好的命名方式,有意义的命名方式

3.2 重复代码(Duplicated Code)

场景 方法
同一个类中出现重复代码 提取重复代码到一个函数中
重复代码在一个超类的不同子类中 函数上移 到 父类中
重复代码出现在无关的类中 把重复代码抽取到额外的一个类中
重复代码只是相似而不是完全相同 移动语句:把重复的代码合并在一起,然后再抽取

 

 

 3.3 过长函数(Long Function)

1- 抽取函数;

2- 减少临时变量:使用查询取代临时变量;

3- 减少参数个数;

4- 如果参数个数太多;

采用参数对象(固定的几个参数同时出现,又称“数据泥团”,提取成一个类)

保持对象完整进行简化(使用原有对象,而不是传输对象中的成员);

3.4 过长参数列表(Long Parameter List)

1- 查询取代参数;
2- 保持对象完整,直接传入原有的数据结构;
3- "数据泥团"参数包装成对象;
4- 如果某个参数被用作区分函数行为的标记;使用移除标记参数;

3.5 全局数据(Global Data)

  手段:封装变量。

    把全局数据用一个函数包装起来,至少你 就能看见修改它的地方,并开始控制对它的访问。 

  随后,最好将这个函数(及其 封装的数据)搬移到一个类或模块中,只允许模块内的代码使用它,从而尽量控 制其作用域。 

3.6 可变数据(Mutable Data)
3.7 发散式变化(Divergent Change)
3.8 霰弹式修改(Shotgun Surgery)
3.9 依恋情结(Feature Envy)
3.10 数据泥团(Data Clumps)
3.11 基本类型偏执(Primitive Obsession)
3.12 重复的switch (Repeated Switches)
3.13 循环语句(Loops)
3.14 冗赘的元素(Lazy Element)
3.15 夸夸其谈通用性(Speculative Generality)
3.16 临时字段(Temporary Field)
3.17 过长的消息链(Message Chains)
3.18 中间人(Middle Man)
3.19 内幕交易(Insider Trading)
3.20 过大的类(Large Class)
3.21 异曲同工的类(Alternative Classes with Different Interfaces) 3.22 纯数据类(Data Class)
3.23 被拒绝的遗赠(Refused Bequest)
3.24 注释(Comments)

标签:重构,第三章,函数,读书笔记,重复,数据,代码,参数,Data
From: https://www.cnblogs.com/parent-absent-son/p/16924427.html

相关文章

  • 重构:改善既有代码的设计 读书笔记
    第1章重构,第一个示例1.1起点1.2对此起始程序的评价1.3重构的第一步1.4分解statement函数1.5进展:大量嵌套函数1.6拆分计算阶段与格式化阶段1.7进展:分离......
  • myos3 大学生利用C++构建一个完整的操作系统之代码重构并实现键盘打字和鼠标移动
    ​​myos1大学生利用C++构建一个完整的操作系统打印helloworld​​myos2大学生利用C++构建一个完整的操作系统之响应键盘中断myos3大学生利用C++构建一个完整的操作系统......
  • Head First Java 读书笔记 18章
    第18章:远程部署RMI(分布式计算)什么是RMI?即RemoteMethodInvocation,远程方法调用技术。截止目前,我们学习到的Java方法调用,都是发生在相同堆上的两个对象之间。即对象......
  • 项目重构演进之路
    ####目录介绍-01.整体概述说明-1.1重构的背景-1.2重构的要求-1.3遇到问题-1.4重构的目的-1.5设计目标-1.6产生收益分析-02.重构的......
  • 项目重构演进之路
    目录介绍01.整体概述说明1.1重构的背景1.2重构的要求1.3遇到问题1.4重构的目的1.5设计目标1.6产生收益分析02.重构的具体实践2.1重构什么2.2何时重......
  • 《Go 语言并发之道》读书笔记(五)
    今天这篇笔记我们来记录Channel和Select,Go语言并发中Channel是goroutine传递数据的桥梁,是非常重要的一个工具。定义Channel双向Channel要定义一个channel很简单,只需......
  • 【《硬件架构的艺术》读书笔记】03 处理多个时钟(2)
    3.6握手信号方法 1)X将数放在数据总线上兵发出xreq信号,表示有效数据已经发到接收器Y的数据总线上。2)xreq信号同步到接收器时钟域ylk上。3)Y在识别xreq同步的信号yreq2......
  • 第三章. 业务功能开发--登录验证(使用拦截器)
    第三章.业务功能开发--登录验证(使用拦截器)需求登录验证. 用户访问任何业务资源,都需要进行登录验证. *只有登录成功的用户才能访问业务资源 *没有登录成功的用户访......
  • Head First Java 读书笔记 17章
    第17章:包、jar存档文件和部署(发布程序)Java程序,是由一组类所组成的,这就是开发过程的输出。本章将讨论如何组织、包装和部署Java程序。如何组织Java代码文件?组织代码文件......
  • Head First Java 读书笔记 16章
    有哪些常用的集合?ArrayListTreeSet以有序状态保存并可防止数据重复HashMap以键值对的形式保存数据LinkedList针对经常插入或删除中间元素所设计的高效率集合HashSe......