代码重构之路的艰辛
我承认,这个标题很沉重。我有幸使用了一个开源的项目作为小范围内的二次开发应用。这个项目其实是挺大的,开源代码仅是其中一部分,在二次开发中我对源代码作了一些改进,都是一些必要的改进以及发现的BUG;这些BUG在后续的开源参与者一一修复。我想说的是重构过程中的一些小问题。
一、如果你决定重构代码,特别是别人的代码,最好对整个项目有一个清晰的认识,最好记得哪些代码运行在哪些文件中的哪一行里(基于没有BUG即良好的思想,你可不重构)。我很反感以下的代码。
boo _flag=false;
boo _isexists=false;
string _username;
上面的代码不用多说,大家也可以看出问题,当然这些简单的重构我相信初学者都可以改好,其实这是习惯问题,有时候是:习惯决定行为,行为决定思想,思想决定高度。至少在这里我看不出什么高度可言了。
二、尽量不要去动那些核心的代码。这里所指的核心是:搞不好程序就当掉了。如果你真要没事想重构以显示你的能耐,我劝你还是考虑一下“没有BUG不要修改”的原则。我上一次对一个程序的核心代码(绝对是核心)修改前,花了一个星期去阅读所有文档和代码,虽然之前我已对所有文档和代码看过无数次。
三、如果真要进行重构,那么最好让所有项目组成员都知道。不要以为你重构一点点功能而已,不影响什么东西;如果你不认同这一条,那么请回忆一下中国移动的广告:沟通无限。相信我,作为项目组的一员,他们是非常有必要和需要知道你正在动他们的奶酪的。
四、记得作代码签入注释。我对那种不写注释的人,有想痛扁他一顿的冲动。
五、让他人介入。重构前或者重构后,让你的同事或者上级审阅你的代码,如果你写得很好,也是一种享受;当然,如果你写得很烂,也算得到了指点。
六、重构前,试试测试驱动开发。我从来不在真正的项目中直接切入重构,因为我不能预料到我的切入是否正确,那种感觉就像是,让我不穿衣服的站在街上的那么的窘迫。也许你想找环境的借口;不,我告诉你,环境都是人搭建的,搭建环境是相当不费事的,至少我还没有怎么费事。
七、学会宽容和理解。重构之人火气通常都比较大,当然,你也许可以采用让被重构者请你喝杯咖啡来缓解紧张的气氛。
八、没事不要老打重构的主意。
最后一条我觉得是非常重要的一条,如果你没事老重构的主意,那只能说明一点,你写的很烂;或者你认为其它人写得都没有你高明。相信我,这绝对是没事找抽型的。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放
- 【Postgres扩展】pg_auto_failover支持高可用性和自动故障转移
- 「PostgreSQL」用MapReduce的方式思考,但使用SQL
- 每天百万交易的支付系统,生产环境该怎么设置JVM堆内存大小
- gb格式注释文件转换成gff3注释文件格式
- 有人问你Elasticsearch分布式架构原理,将这篇文章丢过去
- 每日两题 T1
- 每日两题 T2
- 每日两题 T3
- 搭建node服务(三):使用TypeScript
- 聊聊dubbo-go的EchoFilter
- 网页|实现酷炫3D相册
- JAVA|牛客网题解
- 谈一谈|递归解析之DFS全排列
- Python|蚂蚁感冒