将活动站点迁移到MVC结构的策略


Strategies for migrating live site to MVC structure?

在SO上有很多关于MVC和开始使用MVC的好内容,但是我很难找到关于如何在预先存在的实时网站上最好地实现MVC结构的任何内容。

我的网站是一个令人讨厌的回声和连接HTML的大杂烩,会使任何专业程序员呕吐,但它工作。

我想花一些时间来解决不断增加的技术债务,然而,这意味着转向更合理的MVC结构。

如果可能的话,我想避免使用let 'er rip! 100%重写和启动方法,而是一次处理一个部分。但似乎基本控制器的集中式结构并不适合这种方法?

如果我了解该代码库的总体质量水平,那么就没有办法在一步中移动到MVC 。这是不可能的。另一个坏消息是框架不能帮助。它们不能神奇地将糟糕的代码库转换成类似MVCish架构的东西。

相反,你应该专注于增量重构。你的目标应该是大部分遵循SOLID原则和LoD的代码。当您重构代码时,体系结构将自行出现。MVC有许多变体和风格。

有一件你肯定想看的事情是在php中使用模板的方法。检查代码,看看需要更改哪些内容以满足您的需求(这更像是一个方向,而不是一个完整的解决方案)。请记住,在mvc类结构中,视图不是模板,但它使用多个模板。

您可能从中受益的另一件事是更多地了解数据映射器。实现它们将是朝着创建模型层的方向迈出的很好的一步。

哦. .然后有一些一般的讲座你可以看一下(都是30分钟以上):

  • 高级OO模式
  • Clean Code I: Arguments
  • 清洁规范III:函数
  • 不要找东西!
  • 全局状态和单例
  • 继承,多态性,&测试

哦,这本书对重构大型php项目有一些见解。可能对你有用

我同意这里的其他建议,框架不会是一个神奇的修复。

但是从长远来看它是有帮助的。我现在已经将一些mashmash网站转换为kohana框架,并有以下经验:

一开始我不太了解kohana,所以我是在重新编写mysite时学习的。我最终停止了重写,并从头开始编写一个全新的项目来学习kohana,然后回到重写项目,现在我对框架有了更好的理解。

如果你不了解框架,它将是一个陡峭的学习曲线试图使用它来转换一个旧的项目

  1. 重写的第一步是将嵌入到页面中的所有业务/数据库逻辑拉到每个页面的顶部(先于html输出)。所以我没有改变网站的流程/结构,只是将业务逻辑从显示逻辑中分离出来。

    之后,我有了一个站点,它具有易于阅读的业务逻辑,只是在旧的结构中,同时我也熟悉了旧的代码库。

  2. 下一步我做的是修复任何数据库结构问题,使一切都在第三正常形式(如果可能的话)。

    我发现将旧代码修改为新的数据库结构更容易,然后在新框架中绕过旧的数据库结构。(kohana在很大程度上是一个基于约定的框架,而不是基于配置,所以遵循这些约定是很好的,可以简化长期维护)

    拥有良好的数据库结构使生活更容易,无论框架

  3. 下一步是选择要替换的网站的一部分。在kohana中设置路线,让kohana服务于项目的这一部分。Kohana(和其他框架毫无疑问)有一个回退,如果通过url请求的文件已经存在于站点上,那么Kohana将不会处理该请求

    既然您已经在PHP文件中分离了业务逻辑和显示逻辑,那么将代码拆分为控制器和视图就很简单了。对这两个部分进行更改以适应框架。在控制器/视图按预期工作之后,您可以将业务逻辑拆分为模型/控制器

按您的方式浏览网站的那一部分,直到完成。然后测试/启动/bug修复等

,然后重新开始网站的下一部分。

最终你会到达那里…

虽然它花了很多时间来重写,但对我来说这是值得的,因为网站现在更容易维护了。(显然,增益的数量将取决于原始代码库的质量)

祝你好运

这是可能做到的。你可以写你的mod重写,只重定向到boot.php或任何,如果没有实际的文件被发现在请求的路径。这将允许你一次做一个部分。然而,确保你所有的链接都井然有序将是一场噩梦。

可能需要进行重写,并在运行时从旧应用程序中复制和粘贴所需的部分。