关于阅读《重构的时机和方法》这本书所带来的启发

news2024/10/2 1:42:00

前言

近期,我阅读了由克里斯蒂安·克劳森(Christian Clausen)写的、由郭涛翻译的《重构的时机和方法》这本书,读完这本书的内容你会发现《重构的时机和方法》是一本经典的软件开发书籍,它能够帮助软件开发人员提高代码质量和工作效率,作为程序员的我觉得这本书对我很有帮助,有了很多收获和感悟,接下来本文就来简单分享一下。

具体的读书收获

通过读完《重构的时机和方法》这本书, 我认为它最重要的贡献在于它非常清楚地阐述了重构的概念和原则。书中提到,重构是指在不改变软件系统外部行为的情况下,改善其内部结构的过程。这个定义非常精确,也非常实用。在实际的软件开发中,我们经常会遇到代码冗余、复杂度过高、不良设计等问题,这些问题会严重影响代码的可读性、可维护性和可扩展性。通过重构,我们可以有效地解决这些问题,使得代码更易于理解、修改和扩展。此外,书中还介绍了一些重要的设计原则,例如单一职责原则、开闭原则、里氏替换原则等,这些原则可以帮助我们设计出更加优秀的软件系统。

而且,《重构的时机和方法》这本书非常详细地介绍了重构的时机和方法。作者提出了一些情况,例如:代码难以理解、修改困难、添加新特性需要大量修改等,这些情况表明代码需要进行重构。此外,作者还提到了重构的两种模式:预防性重构和修补性重构。预防性重构是在代码还没有出现问题之前进行的重构,目的是为了避免未来的问题。而修补性重构是在代码已经出现问题之后进行的重构,目的是为了解决已经存在的问题。通过这些介绍,读者可以了解到何时需要进行重构,并且学会了如何在适当的时间和方法下进行重构。

还有,这本书详细介绍了重构的基本技术。这些技术包括:提取方法、内联方法、提取变量、内联变量、移动方法、添置方法、移动字段、封装字段、以及替换算法等。这些技术都是非常实用的,可以帮助我们快速地改善代码质量。例如,提取方法可以帮助我们将重复的代码封装到一个方法中,提高代码的可读性和可维护性;移动方法可以帮助我们将方法移动到更合适的位置,使得代码更加清晰和易于理解。

以及,这本书介绍了如何使用测试来支持重构。测试是支持重构的重要手段,因为它可以帮助我们验证重构后的代码是否仍然符合原来的需求。作者提出了一些测试技术,例如:单元测试、集成测试、回归测试等。同时,作者还介绍了如何使用代码覆盖率工具来检查测试覆盖率。通过本书的介绍,读者可以学会如何使用测试来支持重构,并且如何使用代码覆盖率工具来检查测试覆盖率。

另外,这本书介绍了如何进行大规模重构。大规模重构是指对整个软件系统进行的重构,这是一项具有挑战性的任务。作者提出了一些策略,例如:先进行小规模重构、使用模式来指导重构、使用自动化工具等。这些策略可以帮助我们有效地进行大规模重构。

最后,我认为本书的优点之一是非常实用。作者提供了大量的示例和练习,让读者能够通过实际操作来学习重构技术。此外,本书还介绍了一些常见的反模式(anti-patterns),这些反模式会导致代码的低质量和低效率,读者可以通过了解这些反模式来避免在开发过程中犯同样的错误。

附:《重构的时机和方法》的详情及目录

这里顺便分享一下《重构的时机和方法》这本书的详细信息以及目录,有需要的开发者赶快行动吧。

《重构的时机和方法》详情:

京东网上商城https://union-click.jd.com/jdc?e=&p=JF8BAPoJK1olXwQGUFlUCksfCl8IHloRXAcAU24ZVxNJXF9RXh5UHw0cSgYYXBcIWDoXSQVJQwYHVVpcCUkQHDZNRwYlC1ZwU1oqT1V3C2hzbSd8D3NdLloPXkcbM2oIGlsUVQ4KUF1tC0oVAWgPG1kWVDYyVF9tWiXPtdnQvuoJiayNgdbKOEonA2gBE1MXXgcFUFlaDXsXC2s4Rh9JBVkBUm5tOEgnM18IK1glA2gDB1hfCRhDUQFVQQlAFAQEVDBYCUgUAW4LHGsXXAcAVm5tOD1sSi0PexttIHZ5MDk9azAWXCkOQSVVXGgAJjkmdi91eBd1RARjJgRCDght

《重构的时机和方法》的核心目录:

第Ⅰ部分 通过重构电脑游戏来学习

第1章 重构

第2章 重构的内部原理

第3章 拆分长函数

第4章 让类型代码发挥作用

第5章 将类似的代码融合在一起

第6章 保护数据

第Ⅱ部分 学以致用

第7章 与编译器协作

第8章 远离注释

第9章 喜欢删除代码

第10章 永远不要害怕添加代码

第11章 遵循代码中的结构

第12章 避免优化和通用性

0

结束语

总体来看,我个人认为《重构的时机和方法》是一本非常好的软件开发书籍,它详细介绍了重构的概念、原则、时机、方法和技术,让读者能够全面地了解重构的过程和实践。在实际的软件开发中,我们应该根据具体情况选择适当的时机和方法进行重构。重构不仅可以帮助我们提高代码质量,还可以帮助我们改进设计,使得软件系统更加稳定、可靠、易于维护和扩展。此外,本书还提供了大量的实例和练习,让读者能够通过实践来学习重构技术。如果您是一名软件开发人员,或者对软件开发感兴趣,我强烈推荐您阅读这本书。

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

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

相关文章

Java_22_多线程02

多线程 线程通信 线程通信:多个线程因为在同一个进程中,所以互相通信比较容易的。 线程通信的经典模型:生产者与消费者问题。 生产者负责生成商品,消费者负责消费商品。 生产不能过剩,消费不能没有。(即时…

创建一个vite项目,一个命令创建

1. 在一个文件夹下打开cmd命令窗口并输入命令: npm init vuelatest //注意,此命令安装的是vue最新的依赖包,步骤也许跟以下有点点区别,不过问题不大 2. 接着询问你是否需要安装以下这些包,这些都是需要的&#xff0c…

华为OD机试真题 Java 实现【最多获得的短信条数】【2023Q1 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷)》。 刷的越多&…

Pytorch深度学习------torchvision中dataset数据集的使用(CIFAR10)

文章目录 一、什么是TorchVision二、以torchvision.datasets子模块下的CIFAR10数据集为例1、CIFAR10数据集参数2、代码中使用 一、什么是TorchVision torchvision是pytorch的一个图形库,用来处理图像,主要用来构建计算机视觉模型。 从下面的官网截图可以…

力扣1114.按序打印-----题目解析

题目描述 解析: class Foo {public int a 0;public Foo() {}public void first(Runnable printFirst) throws InterruptedException {// printFirst.run() outputs "first". Do not change or remove this line.printFirst.run();a;}public void second…

【多任务编程-线程通信】

进程/线程通信的方式 某些应用程序中,进程/进程和线程/线程之间不可避免的进行通信,进行消息传递,数据共享等 同一进程的线程之间通信方式包括Windows中常用Event, Message等。 不同进程之间的通信可以利用Event, FileMapping(内存共享), W…

unity进阶--xml的使用学习笔记

文章目录 xml实例解析方法一解析方法二 xml-path创建xml文档 xml实例 解析方法一 解析方法二 xml-path 创建xml文档

测试用例实战

测试用例实战 三角形判断 三角形测试用例设计 测试用例编写 先做正向数据,再做反向数据。 只要有一条边长为0,那就是不符合要求,不需要再进行判断,重复。 四边形 四边形测试用例

Javascript程序异常处理

什么是异常,异常就是我们在编写Javascript程序时出现的一些错误,并会在控制台中抛出这个错误,出现异常其实并不是一件坏事,相对的呢它可以提醒我们开发人员哪里出现了错误,方便我们后续的修改,能让我们的代…

JRebel+XRebel热部署插件激活支持IDEA2023.1

JRebel是一款JVM插件,它使得Java代码修改后不用重启系统,立即生效。IDEA上原生是不支持热部署的,一般更新了 Java 文件后要手动重启 Tomcat 服务器,修改才能生效;所以推荐使用 JRebel 插件进行热部署。 在填入Team UR…

字符串类QString

字符串类QString 构造函数数据操作字符串查找和判断遍历查看字节数类型转换字符串格式 Qt中不仅支持C, C中的字符串类型, 而且还在框架中定义了专属的字符串类型。 Cchar*Cstd::string, char*QtQByteArray, QString QByteArray QString和QByteArray的函数很多都是相似的。。…

Feign远程调用如何携带form url

这是一个需要携带参数在form url上的请求,正常调用方式是这样的 响应: 在Feign中,应该怎么调用呢?? 定义OpenFeignClient接口 FeignClient(value "client-service", url "http://127.0.0.1/api") public interface…

Acwing.897 最长公共子序列(动态规划)

题目 给定两个长度分别为N和M的字符串A和B,求既是A的子序列又是B的子序列的字符串长度最长是多少。 输入格式 第一行包含两个整数N和M。 第二行包含一个长度为N的字符串,表示字符串A。 第三行包含一个长度为M的字符串,表示字符串B。字符串…

RunnerGo相比较JMeter有哪些优势

当谈到性能测试需求时,JMeter和RunnerGo都提供了丰富的功能,包括测试场景设置、执行性能测试和性能测试结果分析。然而,这两工具在结构方面存在一些区别。以下是对它们进行比较的另一种角度: 模块化设计: JMeter采用…

16K个大语言模型的进化树;81个在线可玩的AI游戏;AI提示工程的终极指南;音频Transformers课程 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 LLM 进化树升级版!清晰展示 15821 个大语言模型的关系 这张进化图来自于论文 「On the Origin of LLMs: An Evolutionary …

基于压缩和差分算法的嵌入式平台远程更新设计与分析

传统的嵌入式远程更新方案普遍采用整包更新方式,这种方式更新数据量大,占用网络带宽时间长,同时也增加了设备的功耗。 针对这些问题,提出了以减少更新数据量为核心的两种远程更新方案。这两种方案分别使用LZ77压缩和BSDiff差分算…

【Linux】passwd

passwd 与 root 不同的是,一般帐号在更改密码时需要先输入自己的旧密码 (亦即 current 那一行),然后再输入新密码 (New 那一行)。 要注意的是,密码的规范是非常严格的,尤其新的 dist…

《互联网引流:如何吸引更多用户并实现商业目标?》

互联网引流是当今数字时代中,企业和个人在互联网上推广自己产品、服务或内容的一种重要手段。随着互联网的普及和发展,越来越多的企业意识到了利用互联网引流来吸引潜在用户的重要性。 互联网引流的目标是通过各种策略和手段,将潜在用户转化…

Android 在程序运行时申请权限——以自动拨打电话为例

Android 6.0及以上系统在使用危险权限时必须进行运行时权限处理。 main_activity.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://sche…

WordPress集成Argon主题[CentOS7]

下载 Argon主题 https://gitcode.net/mirrors/solstice23/argon-theme/-/releases/v1.3.5?spm1033.2243.3001.5876配置并安装Argon主题 mkdir -p /home/wwwroot/default/wordpress/wp-content/uploads/ cd /home/wwwroot/default/wordpress/wp-content/uploads/# 上传并解压…