总结如何成为“好”代码——读《重构:改善既有代码的设计》有感

2024-09-06 23:38

本文主要是介绍总结如何成为“好”代码——读《重构:改善既有代码的设计》有感,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

读后感

说是“读后感”,其实并不是看得很仔细,尤其是各种代码例子,我基本上是跳过的。个人觉得,重构这件事上,关键是要能嗅出代码,知道什么是代码,这样目标明确后,重构的手段其实是水到渠成的,唯一要注意的就是书中强调的:要以小步为单位稳打稳扎进行。

我所理解的“好”代码

核心目标

那么如何才是“好”代码?书中的答案是:“人们是否能轻而易举地修改”,而我觉得抽象层级更高的描述是:易于未来的工作。“未来的工作”包括了“修改”,也包括其他方面的如“调用”,所以我觉得是个更加准确的描述。

  • 易于未来的工作

具体的方面

对于“未来的工作”,具体可分为:“其他方的调用”、“由于一些原因造成的修改”、“对于新功能的扩展”。当然,在此之前还需要对代码进行“理解”。

  • 理解
  • 调用
  • 修改
  • 扩展

目标特征

而为了能达成核心目标的具体方面,有一些“特征”是代码的目标:

一个具有概括能力的名字可以帮助【理解】代码。

接口/函数【调用】简单,而且它应该不易被误用。

合适的抽象/封装层级。有利于【修改】和【扩展】

我将代码中的“类”、“模块”、“函数”、甚至是一个小的“代码段”,都视作不同级别的“元素”。“元素”的数目不应太多,而且一个“元素”中的内容不能太多,否则不利于【理解】。“元素”的职责单一且明确,之间有较少的牵连,这样【修改】和【扩展】就能变得容易。

代码所代表的“逻辑”,不应有重复,否则【修改】就变得复杂。而且“逻辑”应简短且分支少,否则就难以【理解】。

  • 具有概括能力的名字
  • 调用简单
  • 不容易被误用
  • 合适的抽象/封装层级
  • 没有多余的元素
  • 元素的内容少
  • 元素的职责单一且明确
  • 元素之间有较少的牵连
  • 没有重复的逻辑
  • 逻辑简短
  • 逻辑分支少

尝试用自己的理解梳理书中的内容

在书的第3章,作者讨论了代码的“坏”味道。在我看来,所谓味道就是有悖于某些“目标特征”。
在书的第6~12章,作者讨论了重构的手段。在我看来这些就是为了达成“目标特征”的手段。
在这里插入图片描述


在这里插入图片描述
图中一个“目标特征”相关的内容尽量陈列在了一列。
不过这个图也并不是很精确,更为精确的表示方法应该是用连线表示出对应关系,这种关系很可能是“一对多”的。但那样工作量确实太大,而且可以预见最后图的结果会过于混乱。

后记

我对于 【易于未来的工作】 这一目标的理解,还是比较有自信的。但是关于“具体的方面”以及“目标特征”的总结,可能也并不准确。如果未来有觉得更有道理的理解,可以拐回头看看。

这篇关于总结如何成为“好”代码——读《重构:改善既有代码的设计》有感的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1143441

相关文章

HTML5的input标签的`type`属性值详解和代码示例

《HTML5的input标签的`type`属性值详解和代码示例》HTML5的`input`标签提供了多种`type`属性值,用于创建不同类型的输入控件,满足用户输入的多样化需求,从文本输入、密码输入、... 目录一、引言二、文本类输入类型2.1 text2.2 password2.3 textarea(严格

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

C# List.Sort四种重载总结

《C#List.Sort四种重载总结》本文详细分析了C#中List.Sort()方法的四种重载形式及其实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录1. Sort方法的四种重载2. 具体使用- List.Sort();- IComparable

SpringBoot实现图形验证码的示例代码

《SpringBoot实现图形验证码的示例代码》验证码的实现方式有很多,可以由前端实现,也可以由后端进行实现,也有很多的插件和工具包可以使用,在这里,我们使用Hutool提供的小工具实现,本文介绍Sp... 目录项目创建前端代码实现约定前后端交互接口需求分析接口定义Hutool工具实现服务器端代码引入依赖获

SpringBoot项目整合Netty启动失败的常见错误总结

《SpringBoot项目整合Netty启动失败的常见错误总结》本文总结了SpringBoot集成Netty时常见的8类问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、端口冲突问题1. Tomcat与Netty端口冲突二、主线程被阻塞问题1. Netty启动阻

利用Python在万圣节实现比心弹窗告白代码

《利用Python在万圣节实现比心弹窗告白代码》:本文主要介绍关于利用Python在万圣节实现比心弹窗告白代码的相关资料,每个弹窗会显示一条温馨提示,程序通过参数方程绘制爱心形状,并使用多线程技术... 目录前言效果预览要点1. 爱心曲线方程2. 显示温馨弹窗函数(详细拆解)2.1 函数定义和延迟机制2.2

SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)

《SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)》本文总结了SpringBoot项目整合Kafka启动失败的常见错误,包括Kafka服务器连接问题、序列化配置错误、依赖配置问题、... 目录一、Kafka服务器连接问题1. Kafka服务器无法连接2. 开发环境与生产环境网络不通二、序