我们应该在框架中重写遗留的php应用程序吗


Should we rewrite a legacy php application in a framework?

我目前正在开发一个遗留的PHP应用程序。让您了解应用程序是什么样的:

  • 后端大约14000 LOC。前端约为3000 LOC
  • 每个url都是一个php脚本,不使用类
  • 每个php脚本都有一个与之相关联的智能模板
  • 它大量使用PEAR表单生成插件
  • Frontend提供两种语言版本。这是通过复制php脚本+模板来完成的
  • 它没有遵循许多最佳实践,比如转义所有sql参数、在发布请求时重定向、将php脚本从web根目录中删除、XSS保护、CRSF保护
  • 该应用程序有两个主要的开发人员,我正在临时开发它以提供帮助
  • 该应用程序由多个客户端使用。它们中的每一个可能都有一个稍微修改过的版本

假设你有两周的时间,你会怎么修复这个应用程序?有没有什么框架可以推荐给这种类型的应用程序,并且可以逐步引入?

我想也许可以从引入ORM开始,摆脱sql注入,改进构造sql查询的意大利面条代码。

第1版::因为人们似乎经常关注SCM问题。我确实使用git来跟踪我自己的本地更改。我只是暂时在这个应用程序上工作,所以我并不能告诉其他开发人员该使用哪些工具。此外,这并不是真正的问题。

第2版:我考虑框架的原因是a)其他开发人员提出了它b)它会给项目一个更刚性的结构,因此在未来更容易避免错误(如CSFR)。

您应该用非常小的代码进行重写,不要试图一次重构整个应用程序。不管怎样,在实现修复或其他东西的同时执行它。始终让代码有所改进。

如果应用程序运行良好,则尤其如此。大多数用户不会理解为什么你需要破坏他们的应用程序来提高代码质量,而坏代码对他们来说非常好。

如果重写一个应用程序,那么总是会像旧的错误修复一样,丢失应用程序中已实现的所有遗留知识。也许有一个错误,而且它在过去已经被识别出来了,你可能需要再次解决这个问题。

顺便说一句,我一开始不会把重点放在实现一个框架上。你应该试着把注意力集中在面向对象的编程和实现一个适用的设计模式上。当您的代码已经有些清晰和结构化时,实现一个框架。

假设你有两周的时间,你会怎么修复这个应用程序?(它不安全,有意大利面条代码。)

首先,先确定需要修复的内容。

如果您到目前为止还没有分析应用程序,那么您不可能在两周内将意大利面条代码转换为模块化代码。此外,要重构代码,您需要首先对其进行测试,这可能会对遗留代码产生问题。有一些书是关于这方面的技术的,但并不是所有的书都能很好地应用于遗留的PHP应用程序(但如果到目前为止还没有对遗留的应用程序进行维护,那么就有非常有用的信息)。

因此,您可能希望将与数据库相关的代码移动到自己的模块中,同时考虑SQL注入。如果您为此选择了一个现有的数据库层,您可以通过查看代码来明确说明哪些脚本已经移植,哪些脚本没有移植。

你已经使用了一个视图组件,我会暂时使用它,因为你的时间框架很短。

在我看来,把现有的框架压在当前的代码库上似乎适得其反。你只是在寻找轻量级的、现有的和经过测试的组件,这样你就可以通过使用第三方组件来减少自己编写的应用程序代码。

没有scm

从您迄今为止分享的关于该应用程序的所有内容来看,这是首先需要修复的。将其置于源代码管理之下。在此之前,您不需要进一步讨论。

关于这个问题,我给出了一个更为冗长的答案:如何在我的PHP/SQL/HTML/CSS代码上实现MVC风格?。

我推荐Symfony PHP框架。迁移应用程序的两周时间似乎太短,尤其是在您还没有Symfony技能的情况下。

Zend框架也是一个非常好的PHP框架。

逐部分迁移/重新分解此应用程序将比重写它花费太多工时

  1. 如果你重写,最好从头开始重写。那就是从需求中重写它
  2. 重写时,请维护旧站点。在SCM中使用分支。如果没有SCM,请从现在开始使用它并分支后记
  3. 如果它运行完美(经过大量测试),那么它值得重新思考迁移