Clean Code系列之坏味道及重构

简介: 几乎在每个团队,都至少有一份代码规范,或者代码的check list。然也就仅仅是一份清单。每次团队复盘时,都会有一条,我们要写好代码,然“好代码”是什么样子,什么标准,全取决于各人的水平。每个程序员也都知道code review的重要性,然排期很紧张,难得做一次。宁可花时间追查问题,也不做防御性准备。

几乎在每个团队,都至少有一份代码规范,或者代码的check list。然也就仅仅是一份清单。

每次团队复盘时,都会有一条,我们要写好代码,然“好代码”是什么样子,什么标准,全取决于各人的水平。

每个程序员也都知道code review的重要性,然排期很紧张,难得做一次。宁可花时间追查问题,也不做防御性准备。

这些现象,是不是特别平常,虽然很想改变,但又是无力感呢。

程序员对代码的追求态度决定了职业生涯的高度,代码的质量决定了生活质量。

为什么会有上面提到的现象,大概有这两方面的原因:

1、每个人对“好代码”的观念不一样

2、对于“坏味道”缺乏明确的表象判断,也就很难提出明确的改进措施

好代码

什么样的才是好代码,耳朵听出老茧的那句话“高内聚,低耦合”,可是这句话,太抽象了,类似之前总结的SOLID原则[1],需要更具体的特征。这也类似于要先把书读厚的原因。

怎么培养对代码的审美高度?

首先需要大量阅读好代码,可以去阅读很多开源项目。

其次找个导师,让自己的代码多被审视。

坏味道

如果说好是没有标准的,那坏是有限的。

对象健身操

这是Thoughtworks文集中,有一套对象健身操。保持9条规则。

1、 方法只使用一级缩进

2、 拒绝使用else关键字

3、 封装所有原生类型和字符串

4、 一行代码只有一个“.”运算符

5、 不要使用缩写

6、 保持实体对象简单清晰

7、 任何类中的实例变量都不要超过两个

8、 使用一流的集合

9、 不要使用任何Getter/Setter/Property

重构

经典书籍《重构》、《Clean Code》都是让代码质量提升的优秀教材。它们都是工具书,时时拿出来对照书本检查代码。

在《重构》中,明确列出了多项“坏味道”,并给出了重构方法:

1、 Duplicated Code(重复的代码)

2、 Long Method(过长函数)

3、 Large Class(过大类)

4、 Long Parameter List(过长参数列)

5、 Divergent Change(发散式变化)

6、 Shotgun Surgery(霰弹式修改)

7、 Feature Envy(依恋情绪)

8、 Data Clumps(数据泥团)

9、 Primitive Obsession(基本型别偏执)

10、 Switch Statements(switch惊悚现身)

11、 Parallel Inheritance(平行继承体系)

12、 Lazy Class(冗赘类)

13、 Speculative Generality(夸夸其谈未来性)

14、 Temporary Field(令人迷惑的暂时值域)

15、 Message Chains(过度耦合的消息链)

16、 Middle Man(中间转手人)

17、 Inappropriate Intimacy(狎昵关系)

18、 Alternative Classes with Different Interfaces(异曲同工的类)

19、 Incomplete Library Class(不完整的程序库类)

20、 Data Class(单纯的数据类)

21、 Refused Bequest(被拒绝的遗赠)

22、 Comments(过多的注释)

当然,实际工作中,不能消除所有坏味道,但只要能做到命名合理、没有重复、各个代码单元(类、函数)体量适当、各个代码单元有明确且单一的职责、各个代码单元之间有恰当的交互,就已经是质量相当高的代码了。

我会按上面的内容结合实际工作,出一份Clean Code系列[2],早日让代码摆脱坏味道。

References

[1] SOLID原则: https://www.zhuxingsheng.com/tags/SOLID/

[2] Clean Code系列: https://www.zhuxingsheng.com/tags/Clean-Code/


目录
相关文章
|
运维 前端开发 搜索推荐
大象转身-平台架构如何拥抱业务创新
如果你正在负责一个超大复杂型平台(比如电商、支付、物流)的架构师,且面临各种技术负债(比如架构复杂性、团队协同复杂性),同时业务又面临从平台服务,到场景化创新的转型。那么这篇文章也许对你有收获。
112549 25
|
2月前
|
存储 人工智能 API
AI代理性能提升实战:LangChain+LangGraph内存管理与上下文优化完整指南
在AI代理系统开发中,上下文工程成为提升系统性能的关键技术。本文探讨了从提示工程到上下文工程的转变,强调其通过为AI系统提供背景信息和工具支持,显著提升智能化程度和实用价值。文章系统分析了上下文工程的理论基础、核心策略(如写入、选择、压缩和隔离),并结合LangChain和LangGraph工具,展示了如何实现上下文工程技术以优化AI代理性能。通过Scratchpad机制、内存管理、RAG系统集成、多代理架构及沙盒环境等技术手段,开发者可以更高效地构建高性能、可扩展的AI系统。
248 0
AI代理性能提升实战:LangChain+LangGraph内存管理与上下文优化完整指南
|
前端开发
Grafana汉化笔记
Grafana汉化笔记 tags:网站 @[toc] 前言 本文主要记录Grafana汉化过程,以备后续查阅。Grafana中文版本基于官方源码(前端部分)进行汉化。汉化内容主要为前端UI界面文本,不涉及后端服务器内容。
6815 1
|
2月前
|
JSON 自然语言处理 Nacos
垂直和领域 Agent 的护城河:上下文工程
上下文工程是智能体应对复杂任务的核心能力,通过对项目状态、需求文档、团队沟通等多维度信息的结构化整合,提升大模型输出的准确性与适配性。它超越传统提示词工程,构建系统化的信息输入框架,使智能体更贴近人类思维逻辑,成为实现高质量人机协作的关键方法。
223 0
Linux CentOS 平台安装 rar unrar 命令
Linux CentOS 平台安装 rar unrar 命令
1637 0
|
6月前
|
人工智能 前端开发 JavaScript
纯干货!如何用Cursor+宜搭,3天完成三周开发量(附超详细视频教学)
Cursor是热门代码编辑器之一,通过与宜搭(Yida)结合,提供了强大的低代码页面和自定义组件生成能力。方案利用Claude模型的代码生成能力及MCP支持,大幅提升开发效率。开发者可通过Cursor连接宜搭表单设计器或自定义组件设计器,实现React源码的生成与同步,并支持二次编辑。现有功能涵盖文本、数字、图片、链接等多种字段类型,以及属性面板配置、JS代码生成等。
1596 83
|
设计模式 算法 Java
如何识别和解决 Java 代码中的坏味道
编程中,代码质量随着时间推移逐渐退化是一个普遍问题,这种现象被称为代码坏味道(Code Smell)。代码坏味道并不意味着代码有错误,而是指出可能存在更深层问题的迹象,影响代码的可读性、可维护性和扩展性。识别和解决代码坏味道是提升代码质量的关键步骤。
266 2
读书笔记《业务架构·应用架构·数据架构实战》
读书笔记《业务架构·应用架构·数据架构实战》
274 2
|
存储 Linux 开发工具
Git简介与工作原理:了解Git的基本概念、版本控制系统和分布式版本控制的工作原理
Git简介与工作原理:了解Git的基本概念、版本控制系统和分布式版本控制的工作原理
721 0
|
存储 关系型数据库 MySQL
Spring Boot 2.x基础教程:使用PostgreSQL数据库
Spring Boot 2.x基础教程:使用PostgreSQL数据库
2397 0
Spring Boot 2.x基础教程:使用PostgreSQL数据库