【阅读笔记】《重构》 第三四章

news2024/11/16 12:02:50

第三章 代码的味道

DuplicatedCode(重复代码)

  • 同一个类的两个函数含有相同的表达式
  • 两个互为兄弟的子类含有相同表达式
  • 两个毫不相干的类出现重复代码

LongMethod(过长函数)

  • 函数不宜过长,函数越长越难理解
  • 如果想利用单个类做太多事情,其内往往就会出现大量实例变量,会导致大量重复代码

LongParameterList(过长参数列)

  • 太长的参数列难以理解,太多参数容易造成前后不一致,不易使用

DivergentChange(发散式变化)

  • 如果某个类经常因为不同的原因在不同方向上发生变化,发散式变化就出现了

ShotgunSurgery(霰弹式修改)

  • 如果每遇到某种变化,都必须在许多不同的类内做出许多小修改。如果需要修改的代码散步四处,不但很难找到它们,也很容易忘记某个重要的修改

FeatureEnvy(依恋情结)

  • 将数据和对数据的操作行为包装在一起的技术

DataClumps(数据泥团)

  • 有地方出现相同的三四项数据:两个类中相同的字段、许多函数签名中相同的参数

PrimitiveObsession(基本类型偏执)

  • 如果只为做一两件事而创建结构类型会显得多余

SwitchStatements(switch惊悚现身)

  • switch语句问题在于重复,尽可能用多态来替代

ParallelInheritanceHierarchies(平行继承体系)

  • 属于ShotgunSurgery的特殊情况,每当你为某个类增加一个子类,必须也为另一个类相应增加一个子类

LazyClass(冗赘类)

  • 一个没有任何其价值的类(没有地方有调用到)

SpeculativeGenerality(夸夸其谈未来性)

  • 过度设计,企图以各种各样的钩子和特殊情况来处理一些非必要的事情

TemporaryField(令人迷惑的暂时手段)

  • 某个实例变量仅为某种特定情况而设

MessageChains(过渡耦合的消息链)

  • 客户端代码与查找消息过程中的导航结构紧密耦合

MiddleMan(中间人)

  • 过度运用委托类

InappropriateIntimacy(狎昵关系)

  • 两个类联系过度紧密,需要花费太多时间去探究彼此的private成分

AlternativeClassWithDifferenceInterfaces(异曲同工类)

  • 两个函数做同一件事

IncompleteLibraryClass(不完美的库类)

  • 复用程序库的类并修改其中的类使它完成我们希望完成的工作

DataClass(纯稚的数据类)

  • 拥有一些字段,以及用于访问(读写)这些字段的函数,除此之外一无长处

RefusedBequest(被拒绝的馈赠)

  • 利用继承来复用一些行为,并发现可以很好地应用于日常工作

Comments(过多的)

  • 一段代码中有着长长的注释

第四章

自测试代码的价值

  • 一套测试就是一个强大的bug侦测器,能够大大缩减查找bug所需要的时间
  • 撰写测试代码的最有用时机是在开始编程之前

Junit测试框架

  • 创建一个FileReaderTester类来测试文件读取器。任何包含测试代码的类(即测试用例)都必须继承测试框架所提供的TestCase类
    在这里插入图片描述

  • 重构过程中,可以只运行少数几项测试,主要用来检查当下正在开发或整理的代码

  • 在测试失败的时候,或可以用断言,让错误信息更清楚

  • 编写测试代码时,往往一开始先让它们失败。把失败和错误区分出来,用于不同情况下的排除问题

  • Junit框架的用途时单元测试

    • 单元测试(Unit Test)和功能测试(FunctionalTest)之间的差异
      1. 单元测试更能提高程序员的生产率
      2. 单元测试属于高度局部化的东西,与其他包相互独立
      3. 功能测试时用来保证软件能够正常运作,从客户的角度保障质量,并不关心程序员的生产力
      4. 功能测试尽可能把整个系统当做一个黑箱(黑盒测试)
  • Junit框架设计用来编写单元测试,功能测试往往以其他工具辅助进行

添加更多测试

  1. 观察类该做的所有事情,然后针对任何一项功能的任何一种可能失败的情况,进行测试
  2. 编写未臻完善的测试并实际运行,好过对完美测试的无尽等待
  3. 考虑可能出错的边界条件,把测试火力集中在那里
  4. 当事情被认为应该会出错时,别忘了检查是否抛出了预期的异常
  5. 不要因为测试无法捕捉所有bug就不写测试,因为测试的确可以捕捉到大多数的bug

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/173595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

联合证券|港股再融资“春江水暖” 资本争购热门赛道企业

进入2023年,港股再融资商场有所回暖。到1月18日,已有27家港股上市公司发布拟配售股份(简称“配股”)再融资,募资总额164.01亿港元,较上一年同期增加148.16%。其间,微盟集团的配股再融资吸引了众…

fpga实操训练(lcd测试)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面我们测试过vga输出,当时是找了一个老式的显示器来完成的,也就是本身自带vga接口的显示器。但是,现在市面上大部分显示器都是默认支持hdmi接口的。所以说,如果真的想用fpga测…

都说InnoDB好,那还要不要使用Memory引擎?

我在上一篇文章末尾留给你的问题是:两个 group by 语句都用了 order by null,为什么使用内存临时表得到的语句结果里,0 这个值在最后一行;而使用磁盘临时表得到的结果里,0 这个值在第一行? 今天我们就来看看,出现这个问题的原因吧。 内存表的数据组织结构 为了便于分…

如何在SpringBoot项目中访问静态资源

在springboot项目中如果要在不集成templates的情况下访问静态资源需要做以下配置 1.在项目的application.yml文件中做如下配置 spring:profiles:active: devmvc:view:prefix: /suffix: .html 重点在 配置后生成为WebMvcProperties 配置类。该配置类中有一个内部类View Conf…

各式各样图标的特点

笔者近期在翻看各种样式的图标,逛了下 Iconfont、IconFinder 等图标网站,现根据自己的经验,总结了一些图标特点的描述用语 线性/面性/线面组合平面/立体无层次感(或阴影)/有层次感(或阴影)无填…

Oracle强制加了hint实效三种连接方式使用场合判断

开发写了一个语句使用了connect by level函数 SELECT DISTINCT CTMID FROM ( SELECT CTMID, REGEXP_SUBSTR(FLTUSERIDSTR, ‘[^;]’, 1, l) AS userid FROM s_userinfo,(SELECT LEVEL l FROM DUAL CONNECT BY LEVEL<300) b WHERE l < LENGTH(FLTUSERIDSTR) - LENGTH(rege…

链表的算法题

目录 题型一、克隆含有rand指针的链表 笔试&#xff1a;哈希表 面试&#xff1a;不用容器&#xff0c;模拟哈希表的功能 题型二、给一个单链表头节点Head&#xff0c;判断是否构成回文 题型三、将单链表按某值划分为左边小&#xff0c;中间相等&#xff0c;右边大 6个变量…

Allegro如何设置创建Pin Pair的快捷键操作指导

Allegro如何设置创建Pin Pair的快捷键操作指导 在做PCB设计的时候需要做一组信号的等长,需要使用到创建Pin Pair的功能,如下图,如果每个网络都右键去选择添加比较浪费时间,如下图 Allegro支持给创建一个Create Pin Pair的快捷键位 具体操作如下 打开规则管理器选择Tools

单调栈与单调队列

单调栈与单调队列一、单调栈1.1 思路1.2 例题&#xff1a;单调栈二、单调队列2.1 思路2.2 例题&#xff1a;滑动窗口一、单调栈 1.1 思路 单调栈主要解决以下问题&#xff1a; 1️⃣ 寻找下一个更大元素 2️⃣ 寻找前一个更大元素 3️⃣ 寻找下一个更小元素 4️⃣ 寻找前一个…

理性和感性 - 如何对待错误

上次的博客&#xff0c; 我写了一些关于 软件开发中的理性和感性决定 的故事。 不论是感性还是理性&#xff0c;我们的目的就是要把软件交给用户去用&#xff0c; 在软件行业中有这样一句俗话&#xff1a; 当你把产品交给用户的时候&#xff0c;你的学习才刚刚开始。 当然每个团…

【设计模式】结构型模式·桥接模式

学习汇总入口【23种设计模式】学习汇总(数万字讲解体系思维导图) 写作不易&#xff0c;如果您觉得写的不错&#xff0c;欢迎给博主来一波点赞、收藏~让博主更有动力吧&#xff01; 一.概述 将抽象与实现分离&#xff0c;使它们可以独立变化。用组合关系代替继承关系&#xff0c…

华为数字化转型之道 结语 数字化转型的8个成功要素

结语 数字化转型的8个成功要素 华为开展数字化转型的过程中,积累了一些经验和教训,总结起来有如下成功要素。 1. 一把手担责 要做好数字化转型,企业家就要有战略决心、信心、耐心。数字化转型一定是企业“一把手工程”,需要企业家自上而下地推动并在企业内达成广泛共识。…

免费开题报告|基于SpringBoot+Vue的校内跑腿平台

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

Android 深入系统完全讲解(29)

MediaMuxer 封装器 MediaMuxer 最多仅支持一个视频 track 和一个音频 track&#xff0c;所以如果有多个音频 track 可以先 把它们混合成为一个音频 track 然后再使用 MediaMuxer 封装到 mp4 容器中。 MediaMuxer 支持输出格式为 MP4&#xff0c;webm 和 3gp. 默认我们就用 mp4.…

产生聚类数据集sklearn.datasets.make_blobs()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 产生聚类数据集 sklearn.datasets.make_blobs() [太阳]选择题 以下python代码结果错误的一项是? import matplotlib.pyplot as plt from sklearn.datasets import make_blobs data,labelmak…

统计-参数估计-假设检验-总结二

统计-参数估计-假设检验-总结二参数估计—区间估计三大分布卡方分布(Gamma分布的特例)t分布F分布求估计区间假设检验参数检验拟合优度检验通往 统计-参数估计-假设检验-总结一参数估计—区间估计 以某一范围提供对参数θ\thetaθ的估计。寻找统计量θ1∗(x1,x2,...,xn)\theta…

20230120英语学习

How Animals May Have Conquered Snowball Earth “雪球地球”时期&#xff0c;动物是如何存活的&#xff1f; Planet Earth used to be something like a cross between a deep freeze and a car crusher.During vast stretches of the planet’s history, everything from p…

微信小程序开发尚学堂 介绍 项目结构 组件 喧嚷 事件 模板

一、微信小程序介绍1. 微信小程序介绍微信小程序&#xff0c;简称小程序&#xff0c;是一种不需要下载安装即可使用的应用&#xff0c;它实现了应用”触手可及”的梦想&#xff0c;用户扫一扫或搜一下即可打开应用。说明&#xff1a;小程序是需要下载的&#xff0c;小程序的占用…

概论_第6章_统计量及其抽样分布_知识结构

先看知识结构图数量统计的特点是 背记的内容多&#xff0c; 与前面概率论 背记和计算的多 有很大区别。本文从统计量的概念讲起, 一. 统计量定义&#xff1a; 设 ...... 为取自某总体的样本&#xff0c; 若样本函数TT(, ... ) 中不含有任何未知参数&#xff0c; 则称T 为统计…

力扣刷题记录——682. 棒球比赛、628. 三个数的最大乘积、693. 交替位二进制数

本专栏主要记录力扣的刷题记录&#xff0c;备战蓝桥杯&#xff0c;供复盘和优化算法使用&#xff0c;也希望给大家带来帮助&#xff0c;博主是算法小白&#xff0c;希望各位大佬不要见笑&#xff0c;今天要分享的是——《力扣刷题记录——682. 棒球比赛、628. 三个数的最大乘积…