【阿Q送书第四期】好书推荐《重构的时机和方法》

news2024/9/24 5:29:08

文章目录

    • 背景
    • 概念
    • 介绍
      • 案例
      • 目录
      • 购书
    • 送书规则

背景

最近公司正在组织 Code Review ,看看之前为了赶项目写的代码,真的是一言难尽。所以想趁同事审查我的代码之前做点“小动作”,没错,我想说的就是“代码重构”。

对于工作时间较短或者还未参加过工作的同学来说,可能对代码重构这个概念还不是很熟悉,今天随着阿Q的讲解,希望你可以对代码重构产生新的认识。

在这里插入图片描述

概念

所谓代码重构就是指对现有的代码进行修改,在不改变代码完成其功能的前提下,改善其内部结构,以提高代码的可读性、可维护性和可扩展性。重构的目标是使代码更简洁、更易于理解和修改,同时提高代码的质量和可维护性。

说人话就是对代码进行“美化”:比如将重复的代码提取为共有函数;将复杂的代码逻辑用设计模式进行应用等等。

记得阿里云数据库专家周正中说过:程序是慢慢长大的,没有哪个程序会说自己的这套代码就是它的终态;程序需要一代又一代的程序员来完成其进化,满足业务的需要。在进化过程中,重构是必不可少的工作,是跨时间线、跨空间的协作,重构方法论非常重要。

介绍

基于以上背景,我开始对自己的代码进行疯狂优化(很可能还没优化前效果好😃)。碰巧的是,我在不经意间看到了《重构的时机和方法》这本书,改书阐述的提高代码质量和工作效率方面的内容对我本次代码的重构产生了非常重要的作用。

这本书是由 Christian Clausen 编写,由郭涛翻译的。两位作者介绍如下:

在这里插入图片描述

在这里插入图片描述

这是一本面向程序员的代码设计晋级书籍,作者深入浅出地解析了重构是什么、什么时候要重构和如何重构。书中有大量的示例,一步步演示大师构建软件的关键历程,把成功的软件开发思维分享给所有的读者。

全书由风格不同的两部分组成。第 Ⅰ 部分为重构奠定了坚实的基础,并且针对个人学习。相比全面性,我更关注学习的容易性。这部分适用于尚未有着坚实的重构基础的人,例如学生和初级或自学的开发人员。如果你查看该书的源代码并认为“这似乎很容易改进”,那么可以直接跳过第 Ⅰ 部分。

在第 Ⅱ 部分中,作者更多地关注上下文和团队的学习。选择了自认为在现实世界中最有价值的软件开发课程。一些主题主要是理论性的,例如“与编译器协作”和“遵循代码中的结构”;还有一些主题主要是实用性的,例如“喜欢删除代码”和“让坏代码看起来很糟糕”。因此这部分的应用范围更广,即使是有经验的开发人员也应该学习这些章节。

第Ⅰ部分的章节都使用一个单一的总体示例,因此这些章节紧密地联系在一起,应该逐一阅读。但是在第 Ⅱ 部分中,除了一些相互参考,这些章节内容基本上是独立存在的。如果没有时间阅读整本书,你可以根据自己的需要选择第Ⅱ部分中最感兴趣的主题单独阅读。

案例

来个案例感受下重构之美。

重构前

function transformMap (map: Map) {
    map.setMap (new Array(rawMap.length));
    for (let y = 0; y < rawMap.length; y++) {
        map.getMap()[y] = new Array(rawMap[y] .length);
        for (let x = 0; x < rawMap[y].length; x++){
            map.getMap()[y][x]  = transformTile(rawMap[y][x]);
        }
    }
}

function updateMap(map: Map){
    for (let y = map.getMap().length - 1; y >= 0; y--)
        for (let x = 0; x < map.getMap()[y].length; x++)
            map.getMap()[y][x].update (map,x, y);
}
    
function drawMap(map: Map, g: CanvasRenderingContext2D) {
    for (let y = 0; y < map.getMap() .length; y++)
        for (let x = 0; x < map.getMap()[y].length; x++)
            map.getMap()[y][x].draw(g,x,y);
}

重构后

class Map{
    //...
    transform(){
        this.map = new Array(rawMap.length);
        for (let y = 0; y < rawMap.length; y++){
            this.map[y] = new Array(rawMap[y].length);
            for (let x = 0; x < rawMap[y].length; x++)
                this.map[y][x] = transformTile(rawMap[y][x]);
        }
    }
    
    update(){
        for (let y = this.map.length - 1; y >= 0; y--)
            for (let x = 0; x < this.map[y].length; x++)
                this.map[y][x].update(this,x,y);
    }
	draw(g: canvasRenderingContext2D) {
        for (let y= 0; y < this.map.length; y++)
            for (let x = 0; x < this.map[y].length; x++)
                this.map[y][x].draw(g, x, y);
    }    
}

目录

我给大家整理了一下该书的目录,有需要的同学可以看看

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

第1章 重构

第2章 重构的内部原理

第3章 拆分长函数

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

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

第6章 保护数据

第Ⅱ部分 学以致用

第7章 与编译器协作

第8章 远离注释

第9章 喜欢删除代码

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

第11章 遵循代码中的结构

第12章 避免优化和通用性

购书

一本好书如一位良师,一本好书如一位益友,购书链接也给大家带来了,请收下我的膝盖

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

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

在这里插入图片描述

送书规则

送书啦,送书啦。盆友圈点赞送书(想参加的私信阿Q),第8,38,68好友点赞,3位幸运读者各赠送一本实体书《重构的时机和方法》,PS: 如果没有抽到书籍的想自己购买,我还特别为大家争取了粉丝福利,根据评论区链接购买图书返利19.99元,只有2个名额哦,赶快行动吧!

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

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

相关文章

css设置背景图片和边框背景

介绍一个网站&#xff0c;在这个网站里可以找到各种好看的背景图片和边框图片。 数据大屏 &#xff08;代码是reactts&#xff0c;使用时请自行转换&#xff09; 一&#xff1a;设置页面背景图片 css部分 .productionBoard {width: 100%;height: 100%;padding: 0 2rem;box-si…

高效梳理商业模式,3个免费的精益画布模板网站!

精益画布是一种能够帮助创业者快速开发商业模式的工具&#xff0c;它广泛应用于初创公司、企业创新、新产品发布等领域&#xff0c;并且精益画布可以帮助创业者系统地归纳商业模式&#xff0c;并从中找到新的商业机会。本文将向大家介绍3款免费的精益画布模板网站&#xff0c;这…

SFP3012-ASEMI快恢复二极管参数、规格、尺寸

编辑&#xff1a;ll SFP3012-ASEMI快恢复二极管参数、规格、尺寸 型号&#xff1a;SFP3012 品牌&#xff1a;ASEMI 芯片个数&#xff1a;2 芯片尺寸&#xff1a;102MIL*2 封装&#xff1a;TO-247 恢复时间&#xff1a;65ns 工作温度&#xff1a;-40C~175C 浪涌电流&am…

37.Vue生命周期-挂载流程

36.Vue引出生命周期_未来音律的博客-CSDN博客下面绿色框中的是Vue实例&#xff0c;红色框中的是具体的逻辑&#xff0c;而且最主要的是红色框中的还在操作绿色框中的数据。这是因为在定时器里&#xff0c;我们修改了data中的数据opacity&#xff0c;而Vue有这样的承诺&#xff…

MTK 进META的两种方式

1. Preloader进meta&#xff1a; 开机情况下&#xff1a;先发adb reboot meta进入Preloader&#xff0c;然后再进META 2. 开机后直接进meta

yolov5训练自己的数据集 以训练yolov5识别香烟为例

创建数据集目录 在YOLOv5根目录下创建mydata文件夹&#xff08;名字可以自定义&#xff09;&#xff0c;目录结构如下&#xff0c;将之前labelImg标注好的xml文件和图片放到对应目录下 mydata …images # 存放图片 …xml # 存放图片对应的xml文件 …dataSet #之后会在Main文件…

JAVA毕业设计091—基于Java+Springboot+Vue的宠物领养系统(源代码+数据库+14000字论文)

基于JavaSpringbootVue的宠物领养系统(源代码数据库14000字论文)091 一、系统介绍 本项目前后端分离 本系统分为管理员、用户两种角色 用户角色包含以下功能&#xff1a; 登录、注册、首页、宠物喂养、流浪宠物救助、宠物喂养点、丢失宠物查看、流浪宠物救助站、宠物论坛、…

Appium+python自动化(二十五)-获取控件ID(超详解)

简介 在前边的第二十二篇文章里&#xff0c;已经分享了通过获取控件的坐标点来获取点击事件的所需要的点击位置&#xff0c;那么还有没有其他方法来获取控件点击事件所需要的点击位置呢&#xff1f;答案是&#xff1a;Yes&#xff01;因为在不同的大小屏幕的手机上获取控件的坐…

实战项目——基于多设计模式下的同步异步日志系统

系列文章目录 1.项目介绍 2.相关技术补充 3.日志系统框架 4.代码设计 5.功能测试 6.性能测试 文章目录 目录 系列文章目录 1.项目介绍 2.相关技术补充 3.日志系统框架 4.代码设计 5.功能测试 6.性能测试 文章目录 前言 一、项目介绍 二、开发环境 三、核心技…

企业博客资讯如何高效运营起来?

运营一个高效的企业博客资讯需要综合考虑多个因素&#xff0c;包括内容策划、发布频率、优化推广、互动反馈等。下面将从这些方面介绍如何高效运营企业博客资讯。 如何高效运营企业博客资讯 内容策划 首先&#xff0c;需要制定一个明确的内容策略。确定博客的定位和目标受众…

亚马逊云科技纽约峰会,充分释放数据价值和生成式AI的潜力

生成式AI将深刻改变每个公司的运营方式&#xff0c;标志着人工智能技术发展的新转折点。亚马逊云科技昨日在纽约峰会上宣布&#xff0c;推出七项生成式AI新功能&#xff0c;进一步降低了生成式AI的使用门槛&#xff0c;让无论是业务用户还是开发者都能从中受益。借助这些新功能…

Packet Tracer – 使用 CDP 映射网络

# Packet Tracer – 使用 CDP 映射网络 ## 地址分配表 设备 接口 IP 地址 子网掩码 本地接口和互联邻居 Edge1 G0/0 192.168.1.1 255.255.255.0 G0/1 - S1 S0/0/0 S0/0/0 - ISP Branch-Edge S0/0/1 209.165.200.10 255.255.255.252 S0/0/1 – ISP Branch…

window下运行sh脚本/Linux命令

安装Git 首先找到git安装官方网址&#xff0c;Git的官方网址如下所示 https://git-scm.com/download/win 选择合适的Git版本安装即可。 一般一直点击install即可&#xff0c;注意环境变量的environment path的复选框点击。具体操作以及成果标志如下博客所示。 Windows 命令…

「VS」常见提示图标含义

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「VS」Visual Studio&#x1f4da;全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C」C/C程序设计「Win」Windows程序设计「算法」数据结构与算法「File」数据文件格式 目录 VS官网…

深入了解HTTP代理在网络爬虫与SEO实践中的角色

随着互联网的不断发展&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;成为各大企业和网站重要的推广手段。然而&#xff0c;传统的SEO方法已经难以应对日益复杂和智能化的搜索引擎算法。在这样的背景下&#xff0c;HTTP代理爬虫作为一种重要的工具&#xff0c;正在逐渐被…

金蝶云星空对接打通管易云物料查询接口与商品新增接口

金蝶云星空对接打通管易云物料查询接口与商品新增接口 数据源系统:金蝶云星空 金蝶K/3Cloud&#xff08;金蝶云星空&#xff09;是移动互联网时代的新型ERP&#xff0c;是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”&#xff0c;旨在…

java实现简单的购物车

文章目录 包含的功能增加商品删除商品修改商品购买数量展示商品 源代码Item.javaShoppingCart.java 包含的功能 增加商品 private static void addItem(ArrayList<Item> shoppingCartList, Scanner sc) {String id null;while(true){System.out.println("请输入商…

HTML <picture> 标签

实例 如何使用 <picture> 标签: <picture><source media="(min-width:650px)" srcset="/i/photo/flower-4.jpg"><source media="(min-width:465px)" srcset="/i/photo/tulip.jpg"><img src="/i/ph…

难道真是小年?24浙大MBA项目报考形势研判:避开锋芒,逆势而行

还有几天时间&#xff0c;七月就过去了&#xff01;今年浙大MBA项目提前批面试还有最后六个批次&#xff1a; 但如果把区域便利性因素考虑进去&#xff0c;对于多数考生来说只有不超过三个批次的申请机会&#xff01;随着前面批次的面试完成&#xff0c;其实看得出来今年…

机器学习01 -Hello World(对鸢尾花(Iris Flower)进行训练及测试)

什么是机器学习&#xff1f; 机器学习是一种人工智能&#xff08;AI&#xff09;的子领域&#xff0c;它探索和开发计算机系统&#xff0c;使其能够从数据中学习和改进&#xff0c;并在没有明确编程指令的情况下做出决策或完成任务。 传统的程序需要程序员明确编写指令来告诉…