PHP代码维护,重构变困难的4种原因分析
本文分析讲述了PHP代码维护,重构变困难的4种原因。分享给大家供大家参考,具体如下:
代码维护,重构是件很令人不爽的一件事。以下几种情况,会让代码维护和重构变得很困难。
1. 项目开始时,大家规定好一些代码规范,在一定的规范下进行开发,但是人的思想是不一样的,也就是说每个功能不同的人实现的逻辑可能会有这样那样的不同,导致了一些人不愿意去看别人代码,要改别人代码,首先要了解这个人当时是怎么想的,他的逻辑是怎么样的。所以有很多人的想法是有那看别人代码的时间,我就重新做好了。这种想法不要有,看别人代码也能学到不少东西。如果都这样想,我想冗余代码会越来越多,后期重构会变的越来越困难。
2. 做程序的一般跳槽都比较频繁,项目开始的时候,是5个人(项目创始人)开发的,等项目上线了,可能有人离职了。人手不够,公司招人。项目创始人呢,对新招的人,不太信认,怕修改原代码会导致上线的功能出问题,所以就出了新规定,最好不要修改上线过的程序,如果需求变动,最好重新写class或者是function,这样的话,代码会变的越来越多。可能会出现几个class都差不多,或者多个function的功能差不多。
3. 数据库冗余字段,冗余表过多,也会让代码维护变的十分困难。因为功能优化,或者新需求,导致原有表结构根本不能满足新需求,这个时候,就会去表里添加字段,或者挂接另一个表,长期以往,数据库变的很臃肿,数据库一大,代码肯定就不用说了,程序都是围绕着数据来的,冗余字段,冗余表都要维护的,不然数据就不统一了。必要的冗余可以减少数据库查询,如果过多,只会事得其返。所以在修改数据库时更要考虑清楚,考虑将来数据库和代码要重构的情况。
4. 个人原因是最主要的原因,首先要有分块思想,也可以说是oop思想,这种思想是在实战中养成的,这个是要一定时间的。不要为了急着去实现功能而忽视了整体考虑。假如来了一个新需要,我会首先考虑怎么实现这个需求,有了思路后,我也不会急着去开发这个功能,我还会在考虑这个功能模块,会不会用在其他地方?如果其他地方用,怎么样让其他地方用着更方便。我会让所以调用这个功能模块的地方,接口只有一个。然后我才会着手去开发。还有一点,不要相信需求定下来就不会变了,不会的。人的想法很多,开发代码的时候,这一点也要考虑进去,所以统一的接口在需求变动时,我只要修改一个地方,其他地方都可以改掉。如果这样考虑了,前期开发时,时间会多一点,但是后期维护就快很多。
小结一下,有了上面4点,重构数据库,重构代码将是必然的
1. 人的思想不可能一样,大家都在尽量往一处想,但是总会有这样,那样的不同。
2. 急于要完成功能,而不深入了解别人代码。研究别人代码不如重新开发快,这种思想不好。
3. 数据库冗余,这个我个人觉得必然会出现的,一个项目做大,做强,一定是在不断的成长,成长过程中,数据库不可能是一成不变的。
4. 缺少分块思想,我觉得一个项目,就是很多功能独立的小块通过一定线串起来的,代码重构也就是把这些小块的重新组合,当然各个小块,在重构前后实现的功能会不一样,但它还是为了实现一定的功能,只不过由旧变新而已。
上面的几点是我在开发项目过程实际遇到的,欢迎大家补充。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP基本语法入门教程》、《php面向对象程序设计入门教程》及《php优秀开发框架总结》
希望本文所述对大家PHP程序设计有所帮助。
相关推荐
-
五款PHP代码重构工具推荐
在软件工程学里,重构代码一词通常是指在不改变代码的外部行为情况下而修改源代码.软件重构需要借助工具完成,而重构工具能够修改代码同时修改所有引用该代码的地方.本文收集了五款出色的PHP代码重构工具,以帮助你完善更加优秀的项目. 1. Rephactor Rephactor是一款命令行重构工具,这是一款自动化工具,允许开发者以一种简洁的方式在不同的代码库中修改源码. 主要功能: 保证重构的可逆性-- 一旦发现问题,代码是可逆的,可以回溯到前一个版本. 查找替换功能-- 普通查找替换,方法重命名,类重
-
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
思维导图 点击下图,查看大图. 介绍 条件逻辑有可能十分复杂,因此本章提供一些重构的手法,专门用来简化它们. 全文简述(你可直接跳过下面的内容) 核心重构:Decompose Conditional--分离"转辙逻辑"(switching logic)和"操作细节"(details)分离. 多处测试有相同结果:Consolidate Conditional Expresssion 条件代码中去掉重复成分:Consolidate Duplicate 标识特殊情况:Re
-
使用PHP维护文件系统
PHP有很多与文件系统相关的函数,不仅可以帮助你打开文件,还可以显示目录内容.移动文件等.很多人甚至使用PHP写出了基于Web的文件管理器. 首先需要提醒一些关于文件路径的东西:在Windows你可以在文件路径中使用斜线"/"或反斜线"\",而其他操作系统仅使用"/".出于兼容性考虑,以下实例使用"/"的表示方法: 下面的简单脚本显示了一个基本的目录列表.注释在代码中并解释了每一步: <? /* 在变量 $dir_nam
-
用PHP实现维护文件代码
PHP有很多与文件系统相关的函数,不仅可以帮助你打开文件,还可以显示目录内容.移动文件等.很多人甚至使用PHP写出了基于Web的文件管理器. 首先需要提醒一些关于文件路径的东西:在Windows你可以在文件路径中使用斜线"/"或反斜线"\",而其他操作系统仅使用"/".出于兼容性考虑,以下实例使用"/"的表示方法: 下面的简单脚本显示了一个基本的目录列表.注释在代码中并解释了每一步: <? /* 在变量 $dir_nam
-
rephactor 优秀的PHP的重构工具
PHP框架可以是单一入口,完全面向对象的,完全基于类的MVC模式.但是,我们面对大量的旧的代码,或即便是新的代码,也不尽然完全符合面向对象的原则,符合设计模式.小的应用无妨.但如果面对大型应用,则必然是一个不小的疼痛!! 怎么办?很多人总会面临这一切,PHP代码需要重构.(当然,你要是能明白我所说的这一切,那你肯定是看过<重构--改善既有代码的设计>这一本书) 看看这个链接:http://zh-cn.w3support.net/index.php?db=so&id=100876 我们就
-
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
思维导图 介绍 承接上文的PHP 杂谈<重构-改善既有代码的设计>之 重新组织你的函数继续重构方面的内容. 这章主要针对数据的重构. 1.争论的声音--直接访问Field还是通过函数(Accessor)访问Field 2.修改Array为Object:当你看到一个Array很像一个数据结构,你可以使用Replace Array with Object,把Array变成一个对象.--数据结构更清晰. 专业术语 accessor:访问者,存储器--在本文翻译为"函数" dumb
-
PHP 杂谈《重构-改善既有代码的设计》之二 对象之间搬移特性
思维导图 索引: Ø Move Method(搬移函数) Ø Move Field (搬移值域) Ø Extract Class (提炼类) Ø Inline Class (将类内联化,就是把当前的类合并到其他类中) Ø Hide Delegate (隐藏委托关系) Ø Remove Middle Man ( 移除中间人) Ø Introduce Foreign Method (引入外加函数) Ø Introduce Local Extension (引入本地扩展) 介绍 承接上文PHP 杂谈<
-
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
思维导图 点击下图,可以看大图. 介绍 我把我比较喜欢的和比较关注的地方写下来和大家分享.上次我写了篇<php 跟老大的对话>.还是有很多疑问,这书帮了我不少的忙. 如果你比较繁忙,或者懒得看文字,建议你直接看截图,也会有很大的收获的.你可以通过比较截图中的代码就能知道孰优孰劣了. 代码部分我为什么用图呢?因为我经常用手机看代码,博客园的代码在手机里乱七八糟的,还是看图比较舒服. 专业术语 我们毕竟是用英文字母编码,所以用一些英语单词,更能显示出我们的专业性.以下的英文单词,你如果掌握了,与其
-
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
思维导图 介绍 前几篇系列文章,我比较关注的是<PHP 杂谈<重构-改善既有代码的设计>之一 重新组织你的函数>,但是我觉得我还是没有说清楚,我自己也有很多不理解的地方,而且这篇是我的第一篇这方面的文章,有很多的纰漏,所以我会经常性的去做修改,如果大家有好的意见不妨告知一.二. 今天谈得是"接口",此接口非"Interface",而是一个统称.我们一般可以把供别人使用的函数或者url(一般是用于提供数据)叫接口.--可能还有别的意思,毕竟我现
-
PHP代码维护,重构变困难的4种原因分析
本文分析讲述了PHP代码维护,重构变困难的4种原因.分享给大家供大家参考,具体如下: 代码维护,重构是件很令人不爽的一件事.以下几种情况,会让代码维护和重构变得很困难. 1. 项目开始时,大家规定好一些代码规范,在一定的规范下进行开发,但是人的思想是不一样的,也就是说每个功能不同的人实现的逻辑可能会有这样那样的不同,导致了一些人不愿意去看别人代码,要改别人代码,首先要了解这个人当时是怎么想的,他的逻辑是怎么样的.所以有很多人的想法是有那看别人代码的时间,我就重新做好了.这种想法不要有,看别人代码
-
不错的服务器变慢的两种非常规解决办法
对于网站来说,流量是追求,但是对于站长来说,服务器速度才是根本.没有一个站长会容忍自己的服务器变慢,同样,我作为服务器维护人员,当服务器变慢的时候,就会非常的着急. 从我最近两次解决服务器变慢的问题来看,有时候很难想到服务器变慢会因为这些原因.下面给大家介绍一下,希望某一天你服务器变慢的时候能够想到这个思路! 服务器变慢非常规解决方法一 场景: 在网通机房托管了一台服务器,百M独享.花了很多钱,当然是为了创造更高的价值,这个服务器主要是用来做视频点播.但是从托管之日起,从未感受到100M独
-
Java 不使用第三方变量交换两个变量值的四种方法详解
目录 变量本身交换数值 算术运算 指针地址操作 位运算 简单总结 哈喽,大家好,我是阿Q.前几天有个小伙伴去面试,被面试官的一个问题劝退了:请说出几种不使用第三方变量交换两个变量值的方法. 问题有点绕,好不容易缕清了面试官的问题,却发现答不上来.一时间尴尬无比,只能硬着头皮说不会. 遇到交换变量值的问题,通常我们的做法是:定义一个新的变量,借助它完成交换. 代码如下: t = a; a = b; b = t; 但问题的重点是"不使用第三方变量",那就变得"可爱"起来
-
pycharm查看变量值的4种方法汇总
目录 方法一:插入断点,Debug运行 方法二:勾选上 Run with Python console 方法三:在当前的console 用run 方法四:用print输出即可查看 补充:其他小问题 总结 方法一:插入断点,Debug运行 在欲查看变量值的语句前,插入断点,Debug运行.之后,就在Debug面板下,可以查看各变量值,然后还可按F8.F7.F9查看.调试代码.也可对某些变量,点击右键,选择“Add to Watches”,进行专门监控:对于Array,可以右击选择View as a
-
Java同步代码块解决银行取钱的安全问题实例分析
本文实例讲述了Java同步代码块解决银行取钱的安全问题.分享给大家供大家参考,具体如下: 一 点睛 为了解决类似银行取钱这类安全问题,Java的多线程支持引入了同步监视器来解决这个问题,使用同步监视器的通用方法是同步代码块.同步代码块的语法格式是: synchronized(obj) { //此处代码块就是同步代码块. } 上面语法格式中种的obj就是同步监视器,上面代码的含义是:线程开始执行同步代码块之前,必须先获得对同步监视器的锁定. 任何时刻只能由一个线程获得对同步监视器的锁定,当同步代码
-
Graphics.DrawImage绘制的图像变大的原因分析及解决
目录 Graphics.DrawImage绘制的图像变大 原因分析 解决方案 C#Graphics.DrawImage的一些问题 Graphics.DrawImage绘制的图像变大 原因分析 DrawImage是设备相关的函数,换言之就是,DrawImage会把屏幕的参数带上,所以,它绘制图像的DPI基本都是96.而我的图片是72DPI的. 例如,假定一个 Image 对象的宽度为 216 像素而存储的水平分辨率值为 72 点/英寸.因为 216 除以 72 等于 3,所以 DrawImage
-
Javascript 代码也可以变得优美的实现方法
一.简化代码 采用更为简短的写法,不仅可以减少输入的字符数,还可以减少文件大小.大部分采用简单写法的代码,执行效率都有轻微提高. 1.1 简化常用对象定义:使用 var obj = {}; 代替 var obj = new Object(); 使用 var arr = []; 代替 var arr = new Array(); 1.2 精简if语句三元操作符可以有效精简只涉及赋值传值操作的if语句,比如 var score = 60, grade; if (score < 60) { grade
-
重构Javascript代码示例(重构前后对比)
今天有做了几个asp.net结合Javascript的教程文章.现回顾头来看看那些Javascript脚本,有写得不太理想,过于复杂.现抽取出来,重构它们. 之前一: 复制代码 代码如下: function SelectedAll(cb) { cb.checked = cb.checked ? false : true; var gv = document.getElementById('<%=GridViewCouplets.ClientID %>'); var rc = gv.rows.l
-
jQuery Validation实例代码 让验证变得如此容易
使用客户端验证可以有效的减少数据往返服务器和客户端的次数,有利于提高服务器的资源利用路,并且还能够给用户直观,快速的回应. 在Web 2.0时代,这显得尤其重要,我想大家一定和我一样讨厌用基础的javascript写着烦人的验证.现在服务器端的验证有比较好的框架可以解决,ASP.NET MVC就可以很好的完成这样的工作,所以对于.net开发来说,拥有一个好的客户端养正框架对于开发效率的提高起着至关重要的作用. 我们可以通过下面的地址获得这个JS框架 JQuery jQuery Validatio
-
如何让微信小程序页面之间的通信不再变困难
一个开始 小程序开发者总会碰到各种页面之间的通信问题,实现方式也五花八门,比如... 场景还原 首先这是一个电商小程序. 有这样一个需求: 首页某个地方要展示购物车商品数量. 当我在其他页面加购了商品,首页数量刷新. 实现方式 方式一:onShow直接请求接口 Page({ onShow() { // ...一些逻辑 // 后端请求新的购物车数量 this.requestCartNum(); } }) 不足: 每次onShow都要请求接口,浪费资源. 方式二:globalData存储购物车数量,
随机推荐
- Lua中设置table为只读属性的方法详解
- 写一个漂亮Rakefile的方法
- Java中字符编码格式详解
- 基于js的变量提升和函数提升(详解)
- 判断是否为指定长度内字符串的php函数
- wxpython中Textctrl回车事件无效的解决方法
- MySQL数据库-错误1166 Incorrect column name
- Python装饰器实现几类验证功能做法实例
- javascript 操作table的特性
- 微信小程序中使用javascript 回调函数
- OBJECTPROPERTY与sp_rename更改对象名称的介绍
- 基于MongoDB数据库的数据类型和$type操作符详解
- jQuery性能优化技巧分析
- js 浏览器版本及版本号判断函数2009年
- PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
- Android实现顶部底部双导航界面功能
- SQL Server 数据库实用SQL语句
- Java编程实现用hash方法切割文件
- C++ Primer中&、*符号的多重定义与int *p和int* p的区别讲解
- 你真的了解java单例模式了吗?