重构您的PHP旧代码(实际项目示例)
优秀的开发人员由其代码的质量来定义。 在软件行业,编写良好的代码意味着节省可用于测试,更新,扩展或修复错误的资金。 在本文中,我将向您展示一些技术和想法的真实示例,这些示例将帮助您清理遗留代码并对其进行重构以使其更健壮和模块化。 这些技术不仅将帮助您重构旧代码,而且还将为您提供从现在开始如何编写干净代码的绝妙想法。
什么是重构,为什么我们需要它?
重构是指有助于您编写干净代码的技术和步骤。 这对于其他开发人员很重要,他们随后将可以阅读,扩展和重用代码,而无需进行大量编辑。
接下来的几行将向您展示一些重构遗留代码并使其更完善的示例。
切勿重构没有单元测试的生产代码
我的第一个建议是永远不要开始重构没有适当的单元测试的遗留代码。 我想原因很明显:您最终会遇到难以修复的功能失效,因为您将无法找出损坏的功能。 因此,如果需要重构,请先进行测试。 确保测试中要重构的部分。 检查PHPUnit代码覆盖率分析 。
从代码的最深处开始重构
看下一张照片。 这是我在Github上找到的酒店管理系统的真实项目。 这是一个真正的开源项目,因此封闭源代码可能更糟。
正如您在此方法中看到的,有三个标记为红色的级别。 最深的点应该是第一个if条件内的嵌套if / else语句。 通常,最深的重点是使重构更容易的单个逻辑。
将您的方法分成较小的方法或配置文件/ DB表,从而使方法更短
也许在这种情况下,我们可以将其提取为私有方法,如下所示:
下一个最深的地方是获取帖子数据并加载视图。 现在,在重构其他部分之后,看看方法add()。 它更加干净,可读和可测试。
始终在if语句中使用{}
大多数编程语言都支持单行if语句,并且一些开发人员使用它是因为它很简单,但是,它不可读并且容易引起问题,因为只有一行空行可以破坏条件并开始崩溃。 查看两个示例之间的区别:
不要使用魔术数字或魔术字符串:
在下一个示例中,您注意到如果房间超过250个,它将返回一条错误消息。 在这种情况下,250被认为是一个幻数。 如果您不是编写它的开发人员,将很难弄清楚它代表什么。
为了重构此方法,我们可以得出最大房间数为250。 因此,我们可以将其提取为变量$ maxAvailableRooms,而不是对其进行硬编码。 现在,它对其他开发人员来说更容易理解。
如果不需要,请不要使用else语句:
在相同的availablerooms()函数中,您会注意到if语句,在该语句中,我们可以轻松摆脱else部分,并且逻辑仍然相同。
为您的方法,变量和测试使用有意义的名称
在下面的示例中,您可以看到酒店管理系统中有两种方法称为“ index()和room_m()”。 对于我来说,我无法确定它们的目的是什么。 我认为如果它们的名称具有描述性,会更容易理解。
使用您的编程语言的最大功能
许多开发人员没有使用他们使用的编程语言的全部功能。 这些功能中的许多功能可以节省您很多工作,并使您的代码更健壮。 查看下面的示例,并注意如何仅使用类型提示就可以以更少的代码轻松实现相同的结果。
我想以更好的编码来结束一些快速提示:
- 使用新的数组形式[]而不是旧的array()。
- 使用===运算符代替==,除非不检查dataType很重要。
- 给公共方法简短的描述性名称总是一个好主意。 私有方法可以使用更长的名称,因为它们的作用域有限。
- 仅将通用名称与实现接口示例add()的方法一起使用,并将描述性名称用于单个类方法addUser()或addDocument()。
- 从类中删除未使用的方法。
- 使用前缀is / has具有返回布尔值ex的函数:isAdmin($ user),hasPermission($ user)。
- 始终在类方法和属性中使用访问修饰符。
- 注意界面污染:仅使用用户可以公开使用的方法。
- 在公共方法放在顶部的情况下组织类方法。
- 始终将单一责任概念应用于您的班级。
阅读更多:
- 软件架构—架构与设计之间的差异
- 软件架构:使用AWS构建您的应用程序
- 编写干净的代码,并通过实际示例消除代码异味
From: https://hackernoon.com/refactor-your-php-legacy-code-real-projects-examples-da9edf03ff4b