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数组应用之比较两个时间的相减排序
Aug 18 PHP
DedeCMS dede_channeltype表字段注释
Apr 07 PHP
php目录操作函数之获取目录与文件的类型
Dec 29 PHP
分享一下贝贝成长进度的php代码
Sep 14 PHP
php 如何获取数组第一个值
Aug 06 PHP
php读取csv数据保存到数组的方法
Jan 03 PHP
PHP+shell实现多线程的方法
Jul 01 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
Nov 14 PHP
YII框架批量插入数据的方法
Mar 18 PHP
在php7中MongoDB实现模糊查询的方法详解
May 03 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
PHP 8新特性简介
Aug 18 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中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
PHP里的$_GET数组介绍
2019/03/22 PHP
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
jQuery实现延迟跳转的方法
2015/06/05 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
Angularjs结合Bootstrap制作的一个TODO List
2016/08/18 Javascript
AngularJS 工作原理详解
2016/08/18 Javascript
SVG描边动画
2017/02/23 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
微信小程序图片轮播组件gallery slider使用方法详解
2018/01/31 Javascript
Vue完整项目构建(进阶篇)
2018/02/10 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
[04:03][TI9趣味短片] 小鸽子茶话会
2019/08/20 DOTA
python发布模块的步骤分享
2014/02/21 Python
Python使用multiprocessing创建进程的方法
2015/06/04 Python
Python简单定义与使用字典dict的方法示例
2017/07/25 Python
Python3匿名函数用法示例
2018/07/25 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
2018/12/12 Python
在python中使用xlrd获取合并单元格的方法
2018/12/26 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
使用Keras 实现查看model weights .h5 文件的内容
2020/06/09 Python
Python bisect模块原理及常见实例
2020/06/17 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
美国传奇滑手Paul Rodriguez创办的街头滑板品牌:Primitive Skateboarding
2019/10/29 全球购物
森林防火工作方案
2014/02/14 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
MySQL高速缓存启动方法及参数详解(query_cache_size)
2021/07/01 MySQL