【问题标题】:Should we rewrite a legacy php application in a framework? [closed]我们应该在框架中重写遗留的 php 应用程序吗? [关闭]
【发布时间】:2012-02-12 02:31:03
【问题描述】:

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

  • 后端大约 14,000 LOC。前端大约是 3,000 LOC。
  • 每个url都是一个php脚本,不使用类。
  • 这些 php 脚本中的每一个都有一个与之关联的 smarty 模板。
  • 它大量使用了 PEAR 表单生成插件。
  • 前端提供两种语言。这是通过复制 php 脚本 + 模板来完成的。
  • 它没有遵循许多最佳实践,例如转义所有 sql 参数、重定向发布请求、将 php 脚本置于 Web 根目录之外、XSS 保护、CRSF 保护。
  • 该应用有两个主要开发人员,我正在开发它以提供帮助。
  • 该应用程序被多个客户端使用。他们每个人都可能有一个稍微改变的版本。

假设您有两周时间,您会如何修复此应用程序?有没有什么框架你会推荐它特别适合这种类型的应用程序并且可以逐步引入?

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

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

编辑 2: 我考虑框架的原因是 a) 其他开发人员提出了 b) 它会给项目一个更严格的结构,所以错误(如 CSFR)更多以后很容易避免。

【问题讨论】:

  • 什么坏了?需要修复什么? SQL注入?输出编码?
  • 它不安全并且有意大利面条代码。
  • 当我读到这篇文章时,我在想,你是否可以让这样的东西保持活力 ^^ 我不认为你可以在 2 周内重写它,但我强烈建议你做 something
  • 我希望很明显不是我写的。
  • 明显的第一步:实施SCM SYSTEM

标签: php security


【解决方案1】:

你应该重写非常小的代码,不要试图一次重构整个应用程序。无论如何,在您实施修复或其他事情时执行此操作。总是留下改进的代码。

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

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

顺便说一句,我不会在一开始就专注于实现一个框架。您应该尝试专注于面向对象的编程并在适用的情况下实现设计模式。当您的代码已经有些清晰和结构化时,实施一个框架。

【讨论】:

    【解决方案2】:

    假设您有两周的时间,您会如何修复此应用程序? (它不安全,并且有意大利面条代码。)

    首先了解需要修复的内容。

    如果您到目前为止还没有分析过应用程序,那么您无法在两周内将意大利面条式代码变成模块化代码。此外,要重构代码,您需要先对其进行测试,这可能会给遗留代码带来问题。有一些关于此类技术的书籍,但并非所有书籍都能很好地适用于遗留 PHP 应用程序(但如果您到目前为止还没有对遗留应用程序进行维护,那么无论如何都有非常有用的信息)。

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

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

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

    没有单片机

    根据您迄今为止分享的有关该应用程序的所有内容,这就是首先需要修复的地方。将其置于源代码控制之下。在此之前您无需进一步讨论。

    我对这个问题给出了一个更冗长的答案:How to implement MVC style on my PHP/SQL/HTML/CSS code?

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        逐部分迁移/重构这个应用程序比重写它要花费太多的工时

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

        【讨论】:

        • 1.不是一种选择,不想冒险为客户破坏它。 2.哈哈,没有scm。
        • 开始使用 SCM。然后创建分支。
        • @Maarten:如果没有SCM,那么在修改单字节代码之前首先要做的就是把它放到SCM下。
        • 我本来打算建议两个主要开发者创建一个 github 帐户,但我无法告诉他们使用哪些工具。
        • 对于每个拥有超过零个开发人员的项目,您将需要 scm,否则您将丢失您的代码或至少在未来有很多时间!此处不涉及任何讨论,这是一个重要事实!我不知道任何不使用 scm 并没有丢失一些代码的项目。另一方面,我不知道任何使用 scm 的项目会丢失任何代码。
        猜你喜欢
        • 2011-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-15
        • 1970-01-01
        相关资源
        最近更新 更多