将遗留代码重构为 CakePHP

问题描述 投票:0回答:2

我正在开发一个项目,该项目涉及将现有的 PHP 解决方案转换为 CakePHP。这是我的第一个项目,需要一些重要的迁移知识,但我已经遇到了一个主要障碍。

我处理这个项目的方法是将当前代码划分为组件,然后将这些组件迁移到 CakePHP 的标准。我忽略的一件事是这些组件是如何相互连接的。

更糟糕的是,当前的代码没有明确的文档或注释,也没有使用 MVC 标准。此外,负责当前代码的开发人员也不容易回答问题。

我的问题是……如果您被分配从事这样一个项目,您将如何实现从遗留代码集到 CakePHP 模型的迁移?

php cakephp refactoring
2个回答
2
投票

答案很简单:不要看华丽外表背后的垃圾。

不要试图理解通常完全愚蠢且质量差的代码,而是分析应用程序的业务逻辑和工作流程。询问您的客户是否有该应用程序的最新规格并获取它们。

从头开始构建应用程序。其他一切都是不干净的,实际上,您不太可能简单地将旧代码复制并粘贴到新应用程序中。这甚至不适用于写得不好的 CakePHP 应用程序,而且我对非常糟糕的代码有一些经验,因为我在我们公司进行代码审查。

如果你是 CakePHP 和 MVC 的新手,我建议你花时间学习框架、MVC 和其他基本原则,比如 DRY、KIS,不要在 MVC 框架的背后再次堆积垃圾。


0
投票

您一直在组件中进行重构这一事实非常棒。所以你已经开始了。

我当然不知道细节,但我通常建议不要进行大爆炸式重构或重写(在这方面,如果@floriank的意思是“从头开始构建应用程序”,我恭敬地不同意他的观点)。

我专注于技术债务和遗留代码,我总是建议首先为现有应用程序创建一套自动化测试。为你的改变创建一个安全网。通常,在没有考虑单元测试的旧项目中,单元测试几乎是不可能的。然后你可以做的是编写端到端测试。也许你可以模拟一些东西,比如数据库。这将使您的测试更快、更容易设置。但不幸的是,有时这也是不可能的。在这种情况下,您需要设置一个可以随意使用的系统。也许,您可以在每次运行测试之前备份数据库并恢复它。

然后,忽略所有潜在的逻辑部分。将应用程序视为黑匣子并进行 API 调用或自动化 UI。并验证结果。

您可以使用像 Behat 这样的东西,它使用 Gherkin 语言来编写可读的测试。或者你可以运行 Postman 请求。

一旦有了一套测试,您就可以开始对底层代码进行更改(只要它正在测试中)。改进代码,使其更好地符合CakePHP标准。当您这样做时,您可能会发现某些组件在一段时间后可以进行单元测试。

但是当您进行更改时,您可以使用端到端测试套件来验证您没有破坏任何内容。

在某个时间点,当您切换到 CakePHP 时,您可能必须做出一些(或多或少)重大改变。但到那时,我希望您有更多的单元测试,并且仍然拥有端到端的测试套件。

对于 API,您甚至可以在传入请求和应用程序之间放置负载均衡器或 API 网关。然后,复制请求。一个转到旧应用程序,一个转到新应用程序。然后返回旧响应,但记录它并记录新响应。然后您可以比较两者,希望它们是相同的。但请注意有副作用的请求。

负载均衡器无论如何都很有用,因为当你上线时,很高兴能够切换回旧应用程序,以防万一。

这绝对是一个漫长的过程,但并非不可能。

最后一点:同意旧项目的状态。如果您正在开发新项目,但旧项目仍然收到功能请求,您还必须将它们放入新项目中。这很容易变成一场噩梦。这就是为什么最好重构旧的。错误修复和新功能都是工作的一部分,不必重复两次。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.