将实时站点迁移到MVC结构的策略?

时间:2011-10-18 06:30:34

标签: php html model-view-controller migration rewrite

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

我的网站是一个令人讨厌的回声和连接HTML的混乱,可以让任何专业程序员呕吐,但是它可以工作。

但是,我想花一些时间来处理不断增加的技术债务,这意味着要转向更加理智的MVC结构。

如果可能的话,我想避免 让我们扯掉! 100%重写和启动方法,而是采取它一次一节。但似乎基本控制器的集中式结构不适合这种方法吗?

3 个答案:

答案 0 :(得分:6)

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

相反,您应该专注于增量重构。您的目标应该是主要遵循SOLID原则和LoD的代码。当您重构代码时,架构将自行出现。 MVC有许多变体和口味。

您可能想要了解的一件事是使用templates in php的方法。检查代码,看看你需要改变什么来满足你的需求(它更多的是一个方向,而不是一个完整的解决方案)。请记住,在类似MVC的结构中,View不是模板,但View使用多个模板。

您可能受益的另一件事是了解datamappers的更多信息。实施它们将是创建模型层的一个很好的步骤。

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

哦,this book对重构大型php项目有一些见解。对你有用。

答案 1 :(得分:5)

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

然而,从长远来看,它可以提供帮助。 我现在已经将一些混搭网站转换为kohana框架,并且有过以下经验。

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

如果您不理解该框架,那么试图用它来转换旧项目将是一个陡峭的学习曲线

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

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

  2. 我做的下一步是修复任何数据库结构问题,以便所有内容都处于第3范式(如果可能)。

    我发现将旧代码修改为新的数据库结构更容易,然后在新框架中解决旧数据库结构。 (kohana主要是一个基于约定的框架,而不是配置,因此很高兴遵循这些约定,以便于长期维护)

    拥有良好的数据库结构,无论框架如何,生活都会更轻松

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

    由于您已将业务逻辑与php文件中的显示逻辑分开,因此将代码拆分为控制器和视图是一件简单的事情。对两个部分进行更改以适应框架。在控制器/视图按预期工作后,您可以将业务逻辑拆分为模型/控制器

  4. 在网站的这一部分工作,直到完成。然后测试/启动/ bugfix等

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

    最终你会到达那里......

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

    祝你好运

答案 2 :(得分:0)

有可能做到。如果在请求的路径中找不到实际文件,您可以将mod重写写入仅重定向到boot.php或其他任何内容。这样你就可以一次做一个部分。确保你的所有链接都按顺序排列将是一场噩梦。

可能会进行重写,并在您离开旧应用程序时复制和粘贴您需要的peices。