《重构的时机和方法》——让你的代码更健壮、更易维护

news2024/11/16 17:41:46
  • 👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主
  • 📕系列专栏:Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码系列、duubo源码系列
  • 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
  • 🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人
  • 📝联系方式:hls1793929520,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬👀

文章目录

  • 一、引言
  • 二、专家评价
    • 周正中,阿里云数据库专家
    • 张树杰,华为数据库技术专家
    • 徐前进,腾讯数据湖研发高级工程师
    • 陆公瑜,前Greenplum全球产品总监/Greenplum中文社区创始人
    • 梁桂钊,《高可用可伸缩微服务架构》和《Spring 5设计模式》联合作者
  • 三、书籍内容
  • 四、书籍目录
  • 五、书籍购买
  • 六、总结
  • 七、送书规则

一、引言

作为一名软件开发人员,你一定知道代码重构的重要性。

重构是指在不改变软件外部行为的情况下,改进软件内部结构的过程。

重构可以使代码更健壮、更易维护,并提高软件的质量和可维护性。

而《重构的时机和方法》这本书,则是为了帮助你更好地掌握重构的技巧和方法。

《重构的时机和方法》一书的作者是Martin Fowler,他是软件开发领域的知名专家,也是重构技术的创始人之一。

这本书从实践的角度出发,讲解了重构的基本概念、技术和方法,包括如何识别代码中的坏味道、如何进行重构、如何测试重构后的代码等。

本书还提供了大量的实例和案例,让你可以更好地理解和应用重构技术。

二、专家评价

我们一起来看看各专家对此书的评价

周正中,阿里云数据库专家

程序是慢慢长大的,没有哪个程序会说自己的这套代码就是它的终态;程序需要一代又一代的程序员来完成其进化,满足业务的需要。

在进化过程中,里构定必个可少工作,是跨时间线、跨空间的协作,重构方法论非常重要。

本书的出版恰逢其时,相信可以帮助更多程序员提升跨时空协作的能力,译者本人也奉行终身编程的思想,非常值得一读。

张树杰,华为数据库技术专家

重构是一门抽象的艺术,想要真正理解和运用这些教条般的重构选择和设计模式并非易事,往往需要一个软件工程师进行多年的经验积累才能小有所得。

本书的出版为我们提供了便捷之路,可以让我们站在巨人的肩膀上,拨开重构的迷雾,欣赏到更美的风景。

徐前进,腾讯数据湖研发高级工程师

这是一本面向程序员的代码设计晋级书籍,作者深入浅出地解析了重构是什么、什么时候要重构和如何重构。

书中有大量的示例,一步步演示大师构建软件的关键历程,把成功的软件开发思维分享给所有的读者。

陆公瑜,前Greenplum全球产品总监/Greenplum中文社区创始人

好代码、坏代码和技术债都是影响代码质量的主要因素,本书主要通过代码对比的方法讨论如何写出优雅的代码和如何把握重构时机。

书中处处体现了写代码的哲学观,凝聚了软件开发社区专家多年摸索而获得的宝贵经验。

我相信,程序员通过阅读本书,能够提升能力,节省宝贵时间。

梁桂钊,《高可用可伸缩微服务架构》和《Spring 5设计模式》联合作者

重构是软件工程师的基本功。

在软件工程中,我们需要关注软件的可持续性,也就是代码在其生命周期内如何去适应需求的变化。

如果不断演进的软件积累了许多技术债务,我们不要搁置“破窗”,要思考如何在必要的时机重构代码,以及如何运用合适的重构方法解决这些问题。

本书条理清晰、由浅入深,无论是刚接触编程的入门读者,还是深耕多年的进阶读者,这本书都值得你深度品读。

从这不难看出,此书获得各大厂专家的青睐。

三、书籍内容

本书由风格不同的两部分组成。

第Ⅰ部分为重构奠定了坚实的基础,并且针对个人学习。

相比全面性,我更关注学习的容易性。

这部分适用于尚未有着坚实的重构基础的人,例如学生和初级或自学的开发人员。

如果你查看本书的源代码并认为“这似乎很容易改进”,那么可以直接跳过第Ⅰ部分。

在第Ⅱ部分中,我更多地关注上下文和团队的学习。

我选择了自认为在现实世界中最有价值的软件开发课程。

一些主题主要是理论性的,例如“与编译器协作”和“遵循代码中的结构”;还有一些主题主要是实用性的,例如“喜欢删除代码”和“让坏代码看起来很糟糕”。

因此这部分的应用范围更广,即使是有经验的开发人员也应该学习这些章节。

第Ⅰ部分的章节都使用一个单一的总体示例,因此这些章节紧密地联系在一起,应该逐一阅读。

但是在第Ⅱ部分中,除了一些相互参考,这些章节内容基本上是独立存在的。

如果没有时间阅读整本书,你可以根据自己的需要选择第Ⅱ部分中最感兴趣的主题单独阅读。

四、书籍目录

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

第1章 重构

第2章 重构的内部原理

第3章 拆分长函数

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

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

第6章 保护数据

第Ⅱ部分 学以致用

第7章 与编译器协作

第8章 远离注释

第9章 喜欢删除代码

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

第11章 遵循代码中的结构

第12章 避免优化和通用性

五、书籍购买

京东网上商城:《重构的时机和方法》

https://union-click.jd.com/jdc?e=&p=JF8BAPoJK1olXwQGUFlUCksfCl8IHloRXAcAU24ZVxNJXF9RXh5UHw0cSgYYXBcIWDoXSQVJQwYHVVpcCUkQHDZNRwYlC1ZwU1oqT1V3C2hzbSd8D3NdLloPXkcbM2oIGlsUVQ4KUF1tC0oVAWgPG1kWVDYyVF9tWiXPtdnQvuoJiayNgdbKOEonA2gBE1MXXgcFUFlaDXsXC2s4Rh9JBVkBUm5tOEgnM18IK1glA2gDB1hfCRhDUQFVQQlAFAQEVDBYCUgUAW4LHGsXXAcAVm5tOD1sSi0PexttIHZ5MDk9azAWXCkOQSVVXGgAJjkmdi91eBd1RARjJgRCDght

在这里插入图片描述

六、总结

对于你以前可能听说过或读到过的那种枯燥简单的重构,本书不会过多介绍,而是讨论真正的重构:在实际项目中重构、在遗留系统中重构,在我们几乎每天都面对的各种环境中进行重构。

此外,本书不会让你因为没有进行自动化测试而感到内疚。

作者意识到大多数继承的系统会随着时间的推移而发展演变,我们没有那么幸运都拥有这样的测试套件。

本书列出了一组简单的规则,你可以遵循这些规则来切实地重构复杂、散乱、混乱、未经测试的系统。

通过学习并遵循这些规则,你也可以真正提高你所维护的系统的质量。

不要误会我的意思,本书不是灵丹妙药。

重构破旧粗糙的、未经测试的代码绝非易事。

但是,通过应用本书中的规则和示例,对于如何解决困扰你已久的系统混乱问题,你将获得新思路。

因此,我建议你仔细阅读本书,研究书中的示例,认真思考作者提出的抽象概念和意图。

另外,还要获取作者提供的代码库并与作者一起重构,从头到尾跟随作者的重构之旅。

七、送书规则

❤️❤️❤️ 送书啦 ❤️❤️❤️

感兴趣的可以私信我参加~

朋友圈第8、88、188个好友点赞,3位幸运读者各赠送一本实体书《重构的时机和方法》

PS:如果没有抽到书籍的想自己购买,我还特别为大家争取了粉丝福利,根据评论区链接购买图书返利19.99元,只有2个名额哦,赶快行动吧。

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

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

相关文章

简述IO(BIO NIO IO多路复用)

在unix网络变成中的五种IO模型: Blocking IO(阻塞IO) NoneBlocking IO (非阻塞IO) IO mulitplexing(IO多路复用) signal driven IO (信号驱动IO) asynchronous IO (异步IO) BIO BIO(Blocking IO)是一种阻塞IO模型,也是传统的IO操作模型之一…

不管如何吐槽,购买iPhone的用户依然义无反顾,苹果继续增长

市调机构IDC公布的二季度数据显示,苹果成为前五名之中除华为之外第二家取得增长的手机品牌,而其他国产手机品牌的出货量都在下滑,显示出国内的消费者仍然在热烈追捧iPhone。 二季度苹果在国内市场的手机出货量同比增长6%,虽然增速…

查看详细的退货信息!亚马逊在卖家中心推出新页面!

亚马逊欧洲站发布公告称亚马逊在卖家中心推出了一个新页面,为卖家提供详细的退货信息,以下是公告内容: 我们在卖家中心推出了一个新页面,为卖家提供详细的退货信息。 现在卖家可以查看每个退货订单,其中包含有关 ASI…

sky-notes-01

1、DTO类 DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。 详见阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义 当前端提交的数据和实体类中对应的属性差别比较大时,建议使用…

【信号去噪和正交采样】流水线过程的一部分,用于对L波段次级雷达中接收的信号进行降噪(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

信号的学习笔记二

文章目录 信号捕捉signal信号捕捉sigaction信号集未决信号集和阻塞信号集的工作过程 ![在这里插入图片描述](https://img-blog.csdnimg.cn/b896346af6f1462089779e513a7e237b.png)信号集相关函数sigemptysetsigfillsetsigaddsetsigdelsetsigismember应用 以下函数设置内核信号集…

上传图片到腾讯云对象存储桶cos 【腾讯云对象存储桶】【cos】【el-upload】【vue3】【上传头像】【删除】

1、首先登录腾讯云官网控制台 进入对象存储页面 2、找到跨越访问CIRS设置 配置规则 点击添加规则 填写信息 3、书写代码 这里用VUE3书写 第一种用按钮出发事件形式 <template><div><input type="file" @change="handleFileChange" /&…

[NLP]LLM高效微调(PEFT)--LoRA

LoRA 背景 神经网络包含很多全连接层&#xff0c;其借助于矩阵乘法得以实现&#xff0c;然而&#xff0c;很多全连接层的权重矩阵都是满秩的。当针对特定任务进行微调后&#xff0c;模型中权重矩阵其实具有很低的本征秩&#xff08;intrinsic rank&#xff09;&#xff0c;因…

labelme标签格式json转化成yolov8支持是数据集格式

我们用yolov8做实例分割时&#xff0c;需要制作标签&#xff0c;如果用labelme做&#xff0c;不能直接用模型训练&#xff0c;需要利用一个脚本文件进行转换。 import base64 import random import shutil from tqdm import tqdm import math import json import os import nu…

5.2.12.读写接口实践 copy_from_user copy_to_user

5.2.12.读写接口实践 5.2.12.1、完成write和read函数 (1)copy_from_user函数的返回值定义&#xff0c;和常规有点不同。返回值如果成功复制则返回0&#xff0c;如果 不成功复制则返回尚未成功复制剩下的字节数。 copy_from_user 函数&#xff1a;static inline unsigned long _…

【业务功能篇59】Springboot + Spring Security 权限管理 【下篇】

UserDetails接口定义了以下方法&#xff1a; getAuthorities(): 返回用户被授予的权限集合。这个方法返回的是一个集合类型&#xff0c;其中每个元素都是一个GrantedAuthority对象&#xff0c;表示用户被授予的权限。getPassword(): 返回用户的密码。这个方法返回的是一个字符…

第十二章:priority_queue类

系列文章目录 文章目录 系列文章目录前言priority_queue的介绍priority_queue的使用容器适配器什么是容器适配器STL标准库中stack和queue的底层结构 总结 前言 priority_queue是容器适配器&#xff0c;底层封装了STL容器。 priority_queue的介绍 priority_queue文档介绍 优先…

路由器工作原理

路由器原理 路由概述 路由&#xff1a;跨越从源主机到目标主机的一个互联网络来转发数据包的过程。&#xff08;为数据包选择路径的过程&#xff09; 作用&#xff1a;路由器是连接不同网段的。 转发依据&#xff1a; 路由表&#xff1a;路径选择全看路由表&#xff0c;根…

大数据课程D5——hadoop的Sink

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 掌握Sink的HDFS Sink&#xff1b; ⚪ 掌握Sink的Logger Sink&#xff1b; ⚪ 掌握Sink的File Roll Sink&#xff1b; ⚪ 掌握Sink的Null Sink&#xff1b; ⚪ 掌握Si…

【前端知识】React 基础巩固(三十六)——RTK中的异步操作

React 基础巩固(三十六)——RTK中的异步操作 一、RTK中使用异步操作 引入RTK中的createAsyncThunk&#xff0c;在extraReducers中监听执行状态 import { createSlice, createAsyncThunk } from "reduxjs/toolkit"; import axios from "axios";export cons…

<MySQL> Centos 7环境安装MySQL

Centos 7环境安装MySQL 1.卸载不要的环境 停止MySQL服务 systemctl stop mariadb.service systemctl stop mysqld禁止MySQL服务开机自启 systemctl disable mysqld卸载MySQL软件包 yum remove mysql-server mysql-client删除MySQL数据目录 rm -rf /var/lib/mysql清理MySQ…

福特汽车在全球电动汽车市场的主导地位正在不断扩大

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 2023年7月27日&#xff0c;美国最大的汽车巨头之一福特汽车(F)公布了其2023年第二季度财报。 2023年7月6日&#xff0c;福特汽车宣布&#xff0c;第二季度美国市场的汽车销量已经较2023年第一季度增长了11.7%&#xff0c;令…

机器人状态估计:robot_localization 功能包高级参数详解

机器人状态估计&#xff1a;robot_localization 功能包高级参数详解 前言功能包简介相关参数高级参数 前言 移动机器人的状态估计需要用到很多传感器&#xff0c;因为对单一的传感器来讲&#xff0c;都存在各自的优缺点&#xff0c;所以需要一种多传感器融合技术&#xff0c;将…

微信朋友圈跟圈怎么设置?

朋友圈跟发功能对需要进行朋友圈营销或微信营销的公司和个体创业者的帮助极大。通常情况下&#xff0c;这些创业者或企业会管理多个微信账号来协同运营和管理客户资源&#xff0c;也就是俗称的“大号”和“小号”。如果没有朋友圈跟发软件&#xff0c;客户需要依次使用大号来发…

141. 环形链表

简单 1.9K 相关企业 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链…