PHP代码维护,重构变困难的4种原因分析


Posted in PHP onJanuary 25, 2016

本文分析讲述了PHP代码维护,重构变困难的4种原因。分享给大家供大家参考,具体如下:

代码维护,重构是件很令人不爽的一件事。以下几种情况,会让代码维护和重构变得很困难。

1. 项目开始时,大家规定好一些代码规范,在一定的规范下进行开发,但是人的思想是不一样的,也就是说每个功能不同的人实现的逻辑可能会有这样那样的不同,导致了一些人不愿意去看别人代码,要改别人代码,首先要了解这个人当时是怎么想的,他的逻辑是怎么样的。所以有很多人的想法是有那看别人代码的时间,我就重新做好了。这种想法不要有,看别人代码也能学到不少东西。如果都这样想,我想冗余代码会越来越多,后期重构会变的越来越困难。

2. 做程序的一般跳槽都比较频繁,项目开始的时候,是5个人(项目创始人)开发的,等项目上线了,可能有人离职了。人手不够,公司招人。项目创始人呢,对新招的人,不太信认,怕修改原代码会导致上线的功能出问题,所以就出了新规定,最好不要修改上线过的程序,如果需求变动,最好重新写class或者是function,这样的话,代码会变的越来越多。可能会出现几个class都差不多,或者多个function的功能差不多。

3. 数据库冗余字段,冗余表过多,也会让代码维护变的十分困难。因为功能优化,或者新需求,导致原有表结构根本不能满足新需求,这个时候,就会去表里添加字段,或者挂接另一个表,长期以往,数据库变的很臃肿,数据库一大,代码肯定就不用说了,程序都是围绕着数据来的,冗余字段,冗余表都要维护的,不然数据就不统一了。必要的冗余可以减少数据库查询,如果过多,只会事得其返。所以在修改数据库时更要考虑清楚,考虑将来数据库和代码要重构的情况。

4. 个人原因是最主要的原因,首先要有分块思想,也可以说是oop思想,这种思想是在实战中养成的,这个是要一定时间的。不要为了急着去实现功能而忽视了整体考虑。假如来了一个新需要,我会首先考虑怎么实现这个需求,有了思路后,我也不会急着去开发这个功能,我还会在考虑这个功能模块,会不会用在其他地方?如果其他地方用,怎么样让其他地方用着更方便。我会让所以调用这个功能模块的地方,接口只有一个。然后我才会着手去开发。还有一点,不要相信需求定下来就不会变了,不会的。人的想法很多,开发代码的时候,这一点也要考虑进去,所以统一的接口在需求变动时,我只要修改一个地方,其他地方都可以改掉。如果这样考虑了,前期开发时,时间会多一点,但是后期维护就快很多。

小结一下,有了上面4点,重构数据库,重构代码将是必然的

1. 人的思想不可能一样,大家都在尽量往一处想,但是总会有这样,那样的不同。
2. 急于要完成功能,而不深入了解别人代码。研究别人代码不如重新开发快,这种思想不好。
3. 数据库冗余,这个我个人觉得必然会出现的,一个项目做大,做强,一定是在不断的成长,成长过程中,数据库不可能是一成不变的。
4. 缺少分块思想,我觉得一个项目,就是很多功能独立的小块通过一定线串起来的,代码重构也就是把这些小块的重新组合,当然各个小块,在重构前后实现的功能会不一样,但它还是为了实现一定的功能,只不过由旧变新而已。

上面的几点是我在开发项目过程实际遇到的,欢迎大家补充。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP常用代码
Nov 23 PHP
兼容firefox,chrome的网页灰度效果
Aug 08 PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 PHP
thinkphp实现发送邮件密码找回功能实例
Dec 01 PHP
php计算数组相同值出现次数的代码(array_count_values)
Jan 20 PHP
php中array_multisort对多维数组排序的方法
Jun 21 PHP
golang与php实现计算两个经纬度之间距离的方法
Jul 22 PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
Sep 23 PHP
Yii2框架制作RESTful风格的API快速入门教程
Nov 08 PHP
PHP递归遍历指定文件夹内的文件实现方法
Nov 15 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
May 20 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
Jan 25 #PHP
PHP实现的oracle分页函数实例
Jan 25 #PHP
PHP设置头信息及取得返回头信息的方法
Jan 25 #PHP
基于命令行执行带参数的php脚本并取得参数的方法
Jan 25 #PHP
crontab无法执行php的解决方法
Jan 25 #PHP
win7安装php框架Yii的方法
Jan 25 #PHP
php结合md5实现的加密解密方法
Jan 25 #PHP
You might like
PHP中for与foreach的区别分析
2011/03/09 PHP
Php中使用Select 查询语句的实例
2014/02/19 PHP
代码生成器 document.write()
2007/04/15 Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
2010/04/02 Javascript
jquery 显示*天*时*分*秒实现时间计时器
2014/05/07 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
js动态添加的DIV中的onclick事件简单实例
2016/07/25 Javascript
js+css3实现旋转效果
2017/01/20 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
python利用elaphe制作二维条形码实现代码
2012/05/25 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
Python定时器实例代码
2017/11/01 Python
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
使用requests库制作Python爬虫
2018/03/25 Python
Python面向对象程序设计构造函数和析构函数用法分析
2019/04/12 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
python 实现简单的FTP程序
2019/12/27 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
Radley英国官网:英国莱德利小狗包
2019/03/21 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
大学生入党自我鉴定
2013/10/31 职场文书
小学红领巾中秋节广播稿
2014/01/13 职场文书
工会换届选举方案
2014/05/21 职场文书
2014年测量员工作总结
2014/12/12 职场文书
护士个人年终总结
2015/02/13 职场文书
财务会计求职信范文
2015/03/20 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
2016个人廉洁自律承诺书
2016/03/25 职场文书
HTML常用标签超详细整理
2022/03/19 HTML / CSS
使用Python拟合函数曲线
2022/04/14 Python