代码坏味道

简介: 代码坏味道

随之代码的不断开发,协同作战,代码里将会出现很多奇诡的东西。
以下,这些代码总让人头大

1.神秘命名

let a = "1";
let aaa = "2";
let katse = a+aaa;

2.重复代码

同一类中或者在同一个项目中,频繁出现的拷贝粘贴函数

3.过长函数

想像一下,打开一个文件只有两个函数,这两个函数却拥有一千多行的代码逻辑,谁还有心情去理解呢

4.过长参数列表

一个函数有超出4个入参,并且上不封顶,为什么不使用引入对象参数呢?

5.全局数据

变量放全局,各处使用随时赋值,永远不知道是哪个逻辑的bug

6.可变数据

在不同的地方,修改更新了同一个变量的数据,导致数据混乱!

优化:
1.封装变量
2.封装变量为类,即以查询取代派生变量

7.发散式变化

例子:在一个类中,加入一个新的数据库,需要修改3个函数、修改这个引用,我需要改动5个函数
这样,将数据关心的数据挪移到同一个类中进行统一管理输出.
在调用方,只关心一个调用,不关心数据的来源

8. 霰弹式修改

修改某个变化,就要在多个类中进行各种细微的修改,此时,就可以将这些相关的类挪移到同一个类中,进行管理

9.依恋情结

一个类中的的函数与其他函数或类的数据交换特别多,那么如此严重的数据依赖,为什么不考虑转移函数到其他的相关类中呢

10. 数据泥团

同样的数据结构出现爱多个地方,可以抽离出来作为类处理

11.基本类型偏执

过度使用基本类操作,如果有大量关于某一类的运算或者断言,可以进行封装结构或者多态方式替代

12.重复的switch

重复的switch可以被提炼,并不代表这所有的switch都必须使用多态来处理

13. 循环语句

用管道符更优雅的处理循环,比如filter和map

14.冗余的元素

随着代码量的增加,一些函数或者数据会被增加很多冗余的元素,使用类或者内联函数,清晰提取相关数据元素,进行统一处理

15.夸夸其谈的通用性

缩小类的使用范围,做不必要的通用性缩减,抽离的超类,没有那么大的责任,就可以放到小的模块中

16.临时字段

创建的临时字段,有时候,你的意思就是临时作用,然而,你不知道它的临时结束日期是什么时候,所以,可以使用搬移函数将相关函数或字段放入新的类中,或者引入特例,创建你一个替代对象,避免写条件式代码

17.过长的消息链

let notice = require("./notice");
let people = notice.info.sendMessage.list;

18.中间人

过度的隐藏内部结构

19.内幕交易

类内的数据交换异常频繁,可以考虑将数据单独作为类处理

20.过大的类

一个类中拥有过多的函数,承担过重的逻辑

21. 异曲同工的类

拥有差不多功能的类,可以被合并

22.纯数据类

在纯数据类中创建查看/修改函数

23.被拒绝的遗赠

当子类不需要使用超类的函数或数据,可以使用委托代替子类

24.注释

注释是好的,但是,当你的代码需要过多的注释才能让人看懂的话,是不是可以考虑语义化命名函数、拆分函数等等操作

目录
相关文章
|
Linux
一分钟学会Linux分区挂载
1.使用fdisk对/dev/nvme0n1剩余空间进行分区
629 0
|
11月前
|
人工智能 自然语言处理 API
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
谷歌推出的Multimodal Live API是一个支持多模态交互、低延迟实时互动的AI接口,能够处理文本、音频和视频输入,提供自然流畅的对话体验,适用于多种应用场景。
440 3
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
|
10月前
|
机器学习/深度学习 存储 人工智能
阿里云与零一万物达成战略合作,成立产业大模型联合实验室
阿里云与零一万物达成战略合作,成立“产业大模型联合实验室”。结合双方顶尖研发实力,加速大模型从技术到应用的落地。实验室涵盖技术、业务、人才等板块,通过阿里云百炼平台提供模型服务,针对ToB行业打造全面解决方案,推动大模型在金融、制造、交通等领域的应用,助力AI驱动的产业升级。
712 8
交换机中创建MAC地址表
【10月更文挑战第1天】
499 2
|
SQL 存储 关系型数据库
MySQL中的二进制日志(binlog)与中继日志(Relay log)
MySQL中的二进制日志(binlog)与中继日志(Relay log)
1007 0
|
存储 缓存 NoSQL
Redis性能测试实操记录与分析
Redis性能测试实操记录与分析
224 3
|
机器学习/深度学习 人工智能 数据安全/隐私保护
探索iOS开发的未来趋势
【5月更文挑战第31天】本文深入探讨了iOS开发领域的最新动态与未来展望。随着技术的不断进步,iOS开发者面临着前所未有的机遇与挑战。文章将分析当前iOS开发的关键技术点,并预测未来的发展方向,为开发者提供宝贵的参考信息。
|
存储 运维 监控
如何进行CMDB建设
【5月更文挑战第2天】CMDB建设中如何收集、管理配置信息,如何消费配置信息从而最大程度地发挥出CMDB的价值。
|
机器学习/深度学习 算法 数据安全/隐私保护
基于DCT变换和位平面分解的数字水印嵌入提取算法matlab仿真
这是一个关于数字水印算法的摘要:使用MATLAB2022a实现,结合DCT和位平面分解技术。算法先通过DCT变换将图像转至频域,随后利用位平面分解嵌入水印,确保在图像处理后仍能提取。核心程序包括水印嵌入和提取,以及性能分析部分,通过PSNR和NC指标评估水印在不同噪声条件下的鲁棒性。
|
存储 程序员 编译器
深入理解函数调用--函数栈帧
深入理解函数调用--函数栈帧