代码重构之路 --我的2022年总结

article/2025/8/14 20:04:34

2022年是我正式参加工作的第10个年头,也是我在CSDN上写博客的第11个年头。在这10余年的时间里,虽然在工作上遇到了各种情况,但我一直坚持输出、坚持分享,一共在CSDN上发表了530多篇原创博文。在这些文章中,大部分都是与技术、软件开发相关的,很多文章中都包含了具体的程序代码。
在2022年初的时候,我就立了一个flag:将过去10年里在CSDN博客上发表的文章归类整理,并对主要的程序代码进行重构,以此纪念自己的10年工作。从2022年1月开始,到6月结束,花了将近半年的时间,我圆满完成了这个flag。在这篇文章中,我来回顾一下自己的代码重构之路,也算是对过去的2022年的一个总结。

确定代码重构范围
既然要对代码进行重构,那么首先就要确定具体是哪些代码需要重构。积累10年下来,我的博客的分类比较多,既有软件开发类的,也有技术经验分享类的,还有读书总结类的。我花了将近一个月的时间,从500多篇博文中选出了包含程序代码的文章,并最终确定了需要进行重构的程序代码。我确定重构代码的依据是这些程序代码要有参考性和实用性,大家拿过去就可以应用到具体的项目中。
经过多轮挑选,最终入选我的重构清单的代码所在的博文标题如下:

shell脚本中的文件操作
Windows下C程序中唯一序列号的生成
Linux下vi替换字符命令操作实例
C语言中结构体参数变量的传递
Linux下的目录创建命令使用实践
Linux下将数据库脚本文件从sh格式变为sql格式
Linux下的目录扫描操作函数使用实践
Linux下的删除过期文件操作
寻找满足后缀要求的第一个文件名及其类型的C程序实现
Windows下修改文件后缀的C语言实现
Linux下生成随机密码的C代码实现
Windows下一个简单的日志系统的C代码实现
C语言中结构体变量之间赋值
Linux下写文件头的算法流程及C代码实现
Windows下对密码进行加解密的C代码示例
判断输入年份是否为闰年的另一种方法
Linux下水仙花数&素数&质因数分解的C语言实现
Linux下程序休眠问题的C代码实现
Linux下配置文件读取操作流程及其C代码实现
Linux下互斥量加锁与解锁操作的C代码实现
Linux下获取代码文件名、代码所在行数及日期时间的C程序实现
Linux下获取当前时间到1970年之前某年份的秒数的C代码实现
Linux下一个简单的日志系统的设计及其C代码实现
Linux下合并字符串中连续的多个空格的C代码实现
Linux下分批读取文件中数据的程序流程及其C代码实现
Linux下socket消息流程介绍及其C代码实现
Linux下时间范围判断的程序流程及其C代码实现
Linux下合并前缀相同的文件的程序流程及其C代码实现
Linux下按照时间和大小生成新文件的程序流程及其C代码实现
Linux下两种删除过期文件的方法详述
Windows下写文件时字段对齐和填充的C代码实现
用gdb分析core文件及常见gdb命令操作示例
“多线程”简介及其C代码实现框架
C语言多线程中变量累加问题的分析
查找栈的增长方向的分析及C代码实现
Linux下去除源文件中的重复行的程序流程及其C代码实现
Linux下在主机上实现对备机上目录及文件的操作的C代码实现
Linux下控制(统计)文件的生成的C代码实现
Linux下静态库和动态库简介及生成过程示例
Linux下将前缀和后缀相同的文件移动到同一个目录的算法设计及C代码实现
Linux下将源目录中的文件按照前缀分发到不同目录中的算法设计及C代码实现
结构体中指针赋值问题的分析及C代码示例
Linux下入队列和出队列操作的C代码示例
文件剪切的shell脚本实现
Linux下限制程序中某类操作的执行次数的算法设计及C代码实现
Linux下动态内存分配的C代码示例
C语言代码评审小结
用shell脚本合并多个文件内容
Linux下程序启动之后的初始化—检查配置文件及读取日志配置项的值

确定代码重构(编程)规范
军事上称“兵马未动,粮草先行”,对应到软件开发上就是“代码未写,规范先行”。只有先把编程规范定出来,大家才会有一个编写程序的标准,后面每个人写出来的程序才会有一个统一的风格,这样也方便软件的后期维护。由于我长期从事Linux下的C语言开发,因此基于这些经验,我确定的代码重构(编程)规范主要如下:
1、总体规则
1)代码文件名、函数名、结构体名、变量名、宏定义等统一采用unix代码编写风格。
2)代码中重要变量、关键流程及函数头部必须要有注释,变量在定义的同时要进行初始化。
3)代码中尽量不要出现不常用的缩写。
4)每个函数的参数个数不能超过5个。
5)代码中使用到的常量均使用大写来定义。
6)代码的注释量要达到总体代码量的30%以上。
2、代码规范示例

1)变量名

int    msg_type = 0;
char   request_type[10] = {0};
char  *msg_buf = NULL;
int     g_file_no = 0;   // 全局变量
static  int  s_loop_flag = 0;  // 静态变量

2)代码文件名

new_file_create.c
exp_file_del.c
config_file_read.h

3)结构体名

typedef struct 
{int src_addr;    // 源地址int dst_addr;    // 目标地址char src_port;   // 源端口char dst_port;   // 目标端口
} t_addr_info;
t_addr_info  addr_info;
t_addr_info  *addr_info_new;

4)枚举名

typedef enum
{LEFT_BLANK = 1,RIGHT_BLANK,LEFT_ZERO,RIGHT_ZERO
} e_oper;

5)函数名

int send_request_msg();
char deal_response_msg(int msg_type, char *msg_content);

6)宏定义

#define  MAX_CONTENT_LEN     256
#define  MAX_BUF_LEN         50
#define  LOCK_TIME_OUT       5000 

7)文件注释

/*********************************************************
* 文件名称: lock_and_unlock.c
* 文件标识: 无
* 内容摘要: 加锁与解锁
* 其它说明: 无
* 当前版本: V1.0
* 作   者: 周兆熊
* 完成日期: 20220507
**********************************************************/

8)函数注释

/************************************************************  * 功能描述: 互斥量加锁  * 输入参数: 无 * 输出参数: 无 * 返 回 值: 0-成功, -1-失败  * 其它说明: 无   * 修改日期          版本号          修改人         修改内容  * -------------------------------------------------------- * 20220507         V1.0       Zhou Zhaoxiong     创建  ************************************************************/  

9)if/for/while/switch等语句

// if语句
if (条件)
{执行语句;
}
else if (条件2)
{执行语句2;
}
else
{执行语句3;
}// while语句
while (条件)
{执行语句;
}// for语句
for (i=0; i<X; i++)
{执行语句;
}// switch语句
switch (条件)
{case CMD_READ_RSP:{read_rsp_cmd(attr_cmd);break;}case CMD_DEFAULT_RSP:{default_rsp_cmd(attr_cmd);break;}default:{// break;}
}

代码重构及验证
从3月初开始,我正式启动了对代码的重构工作。由于之前的代码风格不统一,因此所谓的重构代码,可以说是重新写代码。具体的代码编写过程,我不再细说,相信有过代码编写或重构经验的朋友都会有所体会,这里分享下我个人的几个编程经验:
1、代码编写工具的选择
由于我在工作中用Linux的时间比较多,因此习惯了用VIM工具进行代码编写。虽然VIM比不上Windows下的代码编写工具(如source insight)那样操作便捷、界面美观,但仍然是Linux开发者的首选代码编辑器。通过安装一些插件或做一些设置,VIM可以达到近似source insight软件的效果。我的VIM编辑界面如下:
在这里插入图片描述
2、编译方式的选择
由于是基于Linux系统的C语言编程,那么代码编译工具就是gcc或g++。在之前的博文中,我还编写了makefile文件进行代码的编译。此次代码重构时,我直接使用了gcc命令进行编译,主要的考虑是我的代码量不大且代码文件不多,没有必要单独编写makefile文件,这样也可以加快我的代码重构进度。
为了方便代码的编译和持续优化,我将编译命令以注释的方式放到了代码文件中,需要使用的时候直接copy就行。
在这里插入图片描述
3、代码及时编译、及时修改优化
由于是代码重构,因此重构前整体功能基本是没问题的。如果代码重构完成之后编译不过或功能异常,那么大概率是重构过程中代码编写错误或逻辑理解错误造成的。所以,为了及时发现代码重构过程中的问题,我一般是每重构完一个函数就编译一次并简单测试一下,有问题就解问题,没问题就继续重构下一个函数。这样也避免了问题的累积,提高了工作的效率。
在这里插入图片描述
在这里插入图片描述
代码整理归档
经过了3个多月的“奋战”,到了6月初的时候,我达成了预定的计划,完成了40余个主题(对应每一篇博文)代码的重构,并全部测试验证通过。看着这一行行凝聚了自己心血的代码,我不禁感叹:写好代码确实太不容易了!
由于每篇博文的标题比较长,不够精炼,因此在将重构代码整理归档的时候,我对每个主题的标题均进行了简化,只展现最核心的内容,方便后期查阅。
在这里插入图片描述
同时,为了防止本地代码被误删或丢失,我又将重构之后的代码备份了一份到百度网盘上。对于程序员来说,代码备份工作是不可缺少的。

结束语
通过本次代码重构,我不仅进一步提升了自己的编程能力,而且对代码编写有了新的认识。在以前,我会觉得只要程序功能正常、代码编写得规范就可以了,但是在代码重构的过程中,我发现如果要深究,代码永远都有优化的空间和改进的余地。也就是说,我们不要满足于自身已有的技能,在温故而知新的同时,也要加强新技术、新思维的学习,这样才能够跟上技术前进的脚步。
回望过去的2022年,有太多的困难,但庆幸的是自己还是一路平平安安地走过来了。在2023年,我希望用自己的力量为家人带来幸福、为同事带来帮助、为公司带来价值。最为重要的是,希望在2023年里,自己能够一切顺利,平安健康!
如果有朋友对我重构的代码感兴趣,可以私信与我沟通。最后,祝大家在新的一年里身体健康、工作顺利、幸福安康!也祝CSDN越办越好!


http://chatgpt.dhexx.cn/article/TAxliq36.shtml

相关文章

java代码重构的思路Java代码重构的几种模式

Java代码重构的几种模式 Java代码的重构模式主要有三种&#xff1a;重命名方法重构模式、引入解释性变量重构模式、以查询取代临时变量重构模式重命名方法重构模式建议执行如下的步骤来完成&#xff1a;1.建立一个具有新名称的方法2.将旧方法的方法体复制进新方法3.讲旧方法的方…

java 代码重构

几天前的一次上线&#xff0c;脑残手抖不小心写了bug&#xff0c;虽然组里的老大没有说什么&#xff0c;但心里面很是难过。同事说我之所以写虫子是因为我讨厌if/else&#xff0c;这个习惯不好。的确&#xff0c;if/else可以帮助我们很方便的写出流程控制代码&#xff0c;简洁明…

代码重构终极指南!!

&#x1f447;&#x1f447;关注后回复 “进群” &#xff0c;拉你进程序员交流群&#x1f447;&#x1f447; 作者丨Alex Omeyer译者丨弯月出品丨CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;原文链接&#xff1a; https://medium.com/swlh/the-ultimate-engineers-gu…

如何进行代码重构?

作为一个程序员&#xff0c;大部分时候&#xff0c;如果不是一个人承包整个项目&#xff0c;那么有1/3的时间在写代码&#xff0c;1/3的时间在看别人写的代码&#xff0c;剩下的1/3的时间在摸鱼。 那么如何提高摸鱼的时间&#xff1f;看别人写代码十分头疼&#xff0c;分分钟想…

代码重构学习

一、代码重构是什么 用重构手法去重构代码 二、为什么需要代码重构 1.方便维护。为了在修改代码时&#xff0c;添加的地方有个切入点&#xff0c;减少bug。 2.有利于理解设计思想和代码。 三、代码重构怎么做&#xff08;养成习惯&#xff09; 思想&#xff1a; 1.修改一…

代码重构技巧:如何将烂代码变成好代码?

这是本文的目录 前言重构入门1. 格式化代码2. 注释3. 废弃的代码4. 变量命名5. 常量命名6. 负值条件的重构7. {} 作为单独的一行8. 变量定义和使用距离太远 重构进阶1. 重复代码2. 函数参数3. 变量多余4. 缺少变量5. 复杂条件 老旧代码的重构利用工具总 结零基础Python学习资源…

代码重构新手教程:如何将烂代码变成好代码?

作者 &#xff5c; 王莉敏 策划 &#xff5c; 蔡芳芳 作为有几年工作经验的程序员&#xff0c;都会对 bad code 不满意。如何将烂代码变成好代码&#xff0c;本文将由浅入深、一步步带你理解重构的奥秘&#xff0c;让你对重构有个基本的了解。本文基于文章《The Simple Ways to…

常见代码重构技巧(非常实用)

你已选中了添加链接的内容点击上方“芋道源码”&#xff0c;选择“设为星标” 管她前浪&#xff0c;还是后浪&#xff1f; 能浪的浪&#xff0c;才是好浪&#xff01; 每天 8:55 更新文章&#xff0c;每天掉亿点点头发... 源码精品专栏 原创 | Java 2020 超神之路&#xff0c;…

hue执行workflow工作流出现直接FAILED

场景&#xff1a; 执行以下任务流的时候就出现了直接失败的情况 在第一次执行并且数据完善的情况下测试的&#xff0c;状态是成功的 但是第二次是在第一次基础上测试的&#xff0c;基础数据有所缺失 日志为&#xff1a; Failing Oozie Launcher, Main class [org.apache.oo…

Git Workflow工作流示意图

来自&#xff1a;http://blog.osteele.com/posts/2008/05/my-git-workflow UPDATE: git pretty 来自: http://justinhileman.info/article/git-pretty/full/ from: http://iccm.cc/git-workflow/

使用Python开源库Couler编写和提交Argo Workflow工作流

Python 是用户在 Kubernetes 上编写机器学习工作流的流行编程语言。 开箱即用时&#xff0c;Argo 并没有为 Python 提供一流的支持。相反&#xff0c;我们提供Java、Golang 和 Python API 客户端[1]。 但这对大多数用户来说还不够。许多用户需要一个抽象层来添加组件和特定于…

SharePoint 2013 Nintex Workflow 工作流帮助(八)

博客地址 http://blog.csdn.net/foxdave 工作流动作 15. Complete Workflow Task&#xff08;User interaction分组&#xff09; 此工作流动作将完成任何进行中的任务&#xff0c;它将处理足够的单独任务来达到选择的结果&#xff0c;接下来工作流引擎会依据工作流的设置处理…

工作流(Workflow) -- 实现简单工作流程

工作流(activiti) 工作流简介 业务过程的部分或整体在计算机应用环境下的自动化 工作流就是多个参与者,按照某种预定义的规则,传递业务信息,进行审核的功能一个框架(activiti) 核心 23张表 ACT_RE_*:RE’表示repository。 这个前缀的表包含了流程定义和流程静态资源 (…

wf工作流java_WF Workflow 状态机工作流 开发

概述 工作流是对业务流程的建模&#xff0c;当我们设计工作流的时候&#xff0c;我们首先要分析业务处理过程中要经历的步骤。然后&#xff0c;我们就可以利用WF创建工作流模型来模拟业务的处理过程。 我们知道&#xff0c;WF包含两种类型的工作流&#xff1a;顺序工作流和状态…

Mendix 9.6 - Workflow(工作流)基础设计

一 概述 Workflow(工作流)是Mendix 9版本中新增的一种可视化语言功能模块&#xff0c;我们可以用它来构建可扩展的流程。此外它还与其他可视化语言完全集成&#xff0c;例如微流编辑器和页面编辑器。 在公司我们往往需要填写许多表单&#xff0c;包括行政、人事、IT等方面的&a…

workflow工作流(三):画流程图工具对比

一、总结 我所用过能画工作流的工具有2个&#xff1a;1.eclipse插件&#xff0c;2.flowable官方网页版&#xff0c;结论是eclipse插件好用&#xff0c;后者要上传下载&#xff0c;还容易丢数据 注意事项&#xff1a;eclipse插件画出来的bpmn文件的schama是activiti&#xff0…

Bladex Workflow工作流引擎开发进阶-版本v1.2.2

Bladex Workflow工作流引擎开发进阶 1 Bladex Workflow简介2 Flowable简介3 workflow部署和配置-参考文档《BladeX插件 - Blade-flow使用帮助文档 》4 配置任务监听4.1 问题&#xff1a;监听类注入不了service 5 配置事件监听6 复杂表单-配置外部表单&#xff08;不建议配置超大…

workflow工作流(二):34张表

1.常用的表 2.总共34张表 Activiti的后台是有数据库的支持&#xff0c;所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。 ACT_RE_*: RE表示repository。 这个前缀的表包含了流程定义和流程静态资源 &#xff08;图片&#xff0c;规则&…

SAP Workflow 工作流开发步骤总结

一、配置 SWU3 设置管理员 二、新建业务对象 查看我们需要增强的业务对象&#xff0c;比如我们项目上用的是BUS2000114&#xff0c;一般我们工作流的触发 是用单据状态的改变来触发&#xff0c;这就需要我们增强业务对象 使用SWO1 新建一个业务对象 继承上面的标准对象 注意…

小小研究一下工作流WorkFlow

修房子 在小牧老家农村,小时候总是看到村里有人在修房子。每次看到有人修房子的时候,他就会爬到房子面前的沙粒堆上去,翻找随着沙子一起被挖出来的贝壳。虽然也不知道拿来干嘛,不过总觉得收集贝壳很好玩。 小牧也喜欢看他们修房子。修房子的时候,专业的修房师傅会指导工…