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中截取字符串支持utf-8
Jan 18 PHP
非常不错的MySQL优化的8条经验
Mar 24 PHP
php xml 入门学习资料
Jan 01 PHP
PHP可逆加密/解密函数分享
Sep 25 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
Mar 17 PHP
PHP中获取时间的下一周下个月的方法
Mar 18 PHP
PHP实现的多彩标签效果代码分享
Aug 21 PHP
typecho插件编写教程(三):保存配置
May 28 PHP
为你总结一些php信息函数
Oct 21 PHP
全新Mac配置PHP开发环境教程
Feb 03 PHP
yii2超好用的日期组件和时间组件
May 05 PHP
简单的pgsql pdo php操作类实现代码
Aug 25 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编码规范-php coding standard
2007/03/16 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
js实现简单的购物车有图有代码
2014/05/26 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
vue实现页面加载动画效果
2017/09/19 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
Quasar Input:type="number" 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
2020/07/22 Javascript
Python虚拟环境Virtualenv使用教程
2015/05/18 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
python实现简单登陆系统
2018/10/18 Python
python计算n的阶乘的方法代码
2019/10/25 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
Invicta手表官方商店:百年制表历史的瑞士腕表品牌
2019/09/26 全球购物
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
C# .NET面试题
2015/11/28 面试题
产品推广策划方案
2014/05/10 职场文书
小学生读书活动总结
2014/06/30 职场文书
爱祖国爱家乡演讲稿
2014/09/02 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
分析Java中Map的遍历性能问题
2021/06/26 Java/Android
详解Python中下划线的5种含义
2021/07/15 Python
PostgreSQL解析URL的方法
2021/08/02 PostgreSQL
Nginx开源可视化配置工具NginxConfig使用教程
2022/06/21 Servers