代码重构的时机与方法

news2024/12/27 12:15:28

🐱 个人主页:不叫猫先生,公众号:前端舵手
🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀!
💫优质专栏:vue3+vite+typeScript从入门到实践
📢 资料领取:前端进阶资料可以找我免费领取
🔥 摸鱼学习交流:我们的宗旨是在「工作中摸鱼,摸鱼中进步」,期待大佬一起来摸鱼(文末有我wx或者私信)

目录

  • 前言
    • 技能
    • 文化
  • 重构
  • 什么时候重构
  • 本书目录
  • 最后

在这里插入图片描述

前言

在软件开发中,我们将问题放在下图所示的某个位置,表明缺乏足够的技能、文化、工具或这些问题的组合。重构是一项复杂的工作,因此处于中间位置。进行重构有以下要素:
在这里插入图片描述

技能

我们需要技能来知道哪些代码是坏的,即哪些代码需要重构。有经验的程序员可以通过他们对代码异味的了解来确定这一点。但是代码异味的界限是模糊的(需要判断力和经验),或许会有不同的解释,因此不容易理解学习;对于初级开发人员来说,理解代码异味似乎更像是一种第六感, 而不是一种技能。

文化

我们需要一种鼓励花时间进行 重构的文化和工作流程。许多情况下,这种文化是通过在测试驱动开发中使用的著名红绿重构循环来实现的。然而,在我看来,测试驱动开发更困难。红绿重构也很难被在遗留代码库中进行重构所替代。

  • 工具一 我们需 要一些东西来帮助确保我们所做的事情是安全的。实现这一目标的最常,见方法是自动化测试。但如前所述,学习如何进行有效的自动化测试本身就很困难。

重构

重构是指在不改变代码功能的情况下更改代码,使代码可读性和可维护性更强。此外,我们考虑的重构类型在很大程度上依赖于使用面向对象的编程语言。

许多人认为编程就是编写代码;然而,大多数程序员会花更多的时间阅读代码并尝试理解代码,而不只是编写代码。这是因为我们处于一个复杂的领域,在不了解的情况下改变某些东西可能会导致灾难性的失败。

因此,重构的第一个论点纯粹是经济性的:程序员的时间是宝贵的,因此如果我们使代码库更具可读性,就可以节省出时间来实现新功能。第二个论点是,让代码更易于维护意味着缺陷更少且更容易修复。第三个论点是,好的代码库更有意思。当阅读代码时,我们会在脑海中建立一个关于代码在做什么的模型;我们想同时记在脑中的东西越多,就越是筋疲力尽。这就是从头开始会更有趣的原因,也是调试会令人害怕的原因。

什么时候重构

如果你定期进行重构,那么重构效果最好,成本最低。因此如果可以,我建议你把重构融入日常工作。大多数文献都提出了红绿重构工作流程;但正如前面提到的,这种方法将重构与测试驱动开发联系在一起,而在本书中,我们希望将它们分开并重点关注重构这一部分。因此,我推荐一一个更通用的六步开发工作流程来解决任何编程任务。

(1) 探索。通常,一开始我们并不能完全确定需要构建什么。有时客户不知道他们希望我们构建什么;有时客户的需求表述不明;有时我们甚至不知道任务是否可以解决。因此,总是要从实验开始,快速展开实施,然后可以与客户确认他们的需求。

(2)指定。一旦你知道需要构建什么,就让这一需求更明确。 理想情况下,这会导致某种形式的自动化测试。

(3)实施(即实现代码)。

(4)测试。确保代码遵循步骤(2)中的规范。

(5)重构。在交付代码之前,确保下一个人可以轻松使用。

(6)交付。交付方式有很多种,最常见的是拉取请求或推送到特定分支。最重要的是要保证你的代码可以送达用户手中。

本书目录

《重构的时机与方法》目录如下:
在这里插入图片描述
在这里插入图片描述

最后

送给同行两句话,共勉之。
“Talk is cheap, show me the code.”
“You build it, you run it.”
购书链接直达

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

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

相关文章

机器人制作开源方案 | 智能垃圾桶

1. 功能说明 智能垃圾桶是一种利用物联网技术和智能感知能力的智能设备,旨在提高垃圾分类和处理的效率。通常具备以下特点和功能: ① 智能感知:智能垃圾桶配备各种传感器,如压力传感器、红外线传感器等,可以实时感知…

Flutter实现点击头像更新头像的功能,本地相册选取和调用相机两种方式的实现

文章目录 需求实现的效果如图代码实现代码分析用InkWell包住了我们的头像,这样来监听点击头像的事件用showDialog弹出提示框让用户选择是从相册里选择头像还是使用相机来拍照用image_picker实现从设备的相册或相机中选择图片或拍照 需求 Flutter实现点击头像更新头…

数字孪生管控系统,智慧园区楼宇合集

智慧园区是指将物联网、大数据、人工智能等技术应用于传统建筑和基础设施,以实现对园区的全面监控、管理和服务的一种建筑形态。通过将园区内设备、设施和系统联网,实现数据的传输、共享和响应,提高园区的管理效率和运营效益,为居…

【java】【基础8】入门结业-ATM系统实战

目录 一、ATM项目技术 二、能达成的能力 三、开始编码 3.1 系统架构搭建、欢迎页设计 3.1.1 Account 3.1.2 ATM 3.1.3 Test 3.2 开户功能实现 3.2.1 修改AccountgetUserName() 3.2.2 ATM 开户操作 3.2.3 ATM为新用户生成一个随机卡号​编辑 3.3 登录功能实现 3.4 操作页…

登录和注册页面 - 验证码功能的实现

目录 1. 生成验证码 2. 将本地验证码发布成 URL 3. 后端返回验证码的 URL 给前端 4. 前端将用户输入的验证码传给后端 5. 后端验证验证码 1. 生成验证码 使用hutool 工具生成验证码. 1.1 添加 hutool 验证码依赖 <!-- 验证码 --> <dependency><groupId…

Linux——信号量、环形队列

Linux——信号量和环形队列 文章目录 Linux——信号量和环形队列概念信号量的PV原语线程申请信号量失败将会被挂起 信号量函数sem_init初始化信号量sem_destroy销毁信号量sem_wait等待信号量sem_post发布信号量 基于环形队列的生产者消费者模型代码实现 概念 临界资源&#xf…

Qt - 信号和槽

文章目录 信号和槽自定义信号和槽代码实现teacher 类申明信号方法student 添加槽并处理绑定信号和槽 当自定义信号和槽出现重载设置按钮点击 信号可以连接信号断开信号 disconnectQt4版本写法Lambda 表达式函数对象参数操作符重载函数参数可修改标示符函数返回值是函数体 总结拓…

【C++修炼之路】继承

&#x1f451;作者主页&#xff1a;安 度 因 &#x1f3e0;学习社区&#xff1a;StackFrame &#x1f4d6;专栏链接&#xff1a;C修炼之路 文章目录 一、概念及定义二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员七…

2023最新谷粒商城笔记之Sentinel概述篇(全文总共13万字,超详细)

Sentinel概述 服务流控、熔断和降级 什么是熔断 当扇出链路的某个微服务不可用或者响应时间太长时&#xff0c;会进行服务的降级&#xff0c;**进而熔断该节点微服务的调用&#xff0c;快速返回错误的响应信息。**检测到该节点微服务调用响应正常后恢复调用链路。A服务调用B服…

服务器被挂病毒记录(redis入侵)

前言 今天正在快乐的打着游戏&#xff0c;突然一个浙江的电话&#xff1a; 好家伙&#xff0c;我那可怜的1核2g的服务器说在跑挖矿程序&#xff0c;苍天啊&#xff0c;大地呀&#xff0c;我那1核2g的服务器有啥跑呢&#xff0c;别难为这小家伙了。 解决过程&#xff1a; 1…

【学会动态规划】地下城游戏(10)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

计算机网络复习(路由器、交换机、广域网配置~)

文章目录 子网划分路由器和交换机的配置&#xff08;基础知识&#xff09;IOS基础IOS使用技巧Cisco设备的启动Cisco设备的配置途径配置文件的备份与恢复管理网络环境配置Telnet网络测试 配置路由表路由简介路由表简介路由的分类配置静态路由动态路由协议VLAN间的路由路由信息协…

Redis追本溯源(二)数据结构:String、List、Hash、Set、Zset底层数据结构原理

文章目录 一、String底层——sds&#xff08;Simple Dynamic String&#xff09;1.sds相比C语言字符串的优点2.结构3.扩容4.缩容 二、List底层——quickList、zipList1.quickList及其优化过程&#xff08;1&#xff09;quickList大致结构&#xff08;2&#xff09;引入zipList进…

Termux——安装配置

Termux简介1.基础知识1) 基础操作2) 目录结构3) 快捷键 2.基础命令1) 软件安装2) termux保持后台运行3&#xff09;[Process completed (signal 9) - press Enter] 问题修复4&#xff09;更换国内源5&#xff09;获取手机存储权限6&#xff09;基础软件安装 2. 美化相关1) 修改…

ChatGPT vs. 之前版本:性能与表现的对比

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

vue之ReadIdcardMD(身份证读取组件-移动设备)

组件功能 移动便携读取二代身份证信息组件(一般是非接刷二代证方式),包含无效身份证验证,过期身份证验证,是否满16周岁验证 (与windows二代证读取组件的区别是不会生成二代证图片,直接返回base64数据) #界面 #<

测等保2.0——安全区域边界

一、前言 今天我们来说说安全区域边界&#xff0c;顾名思义&#xff0c;安全区域边界就是保障网络边界处&#xff0c;包括网络对外界的边界和内部划分不同区域的交界处&#xff0c;我们的重点就是查看这些边界处是否部署必要的安全设备&#xff0c;包括防火墙、网闸、网关等安…

不止工具:音视频开发「利器」的新机遇

Boxing的制胜关键是快、准、稳&#xff0c;与“音视频开发”有异曲同工之妙。 数字化浪潮席卷、视频化形态加速、终端性能挑战加剧、端侧算力遭遇瓶颈...... 是否存在一种可能性&#xff0c;让所有企业从复杂的音视频开发工程中抽身&#xff0c;重新回归业务本身&#xff1f; …

vue项目启动npm run serve常见报错及解决办法

报错1&#xff1a; 如图&#xff1a; 解决方法&#xff1a;重新安装core-js , npm i core-js 报错2&#xff1a; Syntax Error: EslintPluginImportResolveError: unable to load resolver “alias”. 解决方法&#xff1a;npm install eslint-import-resolver-alias -D 报…

Raft 思想在架构中实践

Raft 诞生背景&#xff1a; 分布式存储系统通常通过维护多个副本来进行容错&#xff0c;提高系统的可用性。要实现此目标&#xff0c;就必须要解决分布式存储系统的最核心问题&#xff1a;维护多个副本的一致性。 首先需要解释一下什么是一致性&#xff08;consensus&#xf…