将实时站点迁移到 MVC 结构的策略?
Posted
技术标签:
【中文标题】将实时站点迁移到 MVC 结构的策略?【英文标题】:Strategies for migrating live site to MVC structure? 【发布时间】:2011-12-09 20:05:46 【问题描述】:在 SO 上有很多关于 MVC 和 MVC 入门的好内容,但我找不到任何关于如何最好地在现有的实时网站上实现 MVC 结构的信息。
我的网站是一个令人讨厌的混杂的回声和串联的 html,这会让任何专业的程序员都大吃一惊,但它确实有效。
不过,我想花一些时间来解决不断增加的技术债务,这意味着要转向更加健全的 MVC 结构。
如果可能的话,我想避免 let 'er rip! 100% 重写和启动方法,而是一次只看一个部分.但似乎基本控制器的集中式结构不适合这种方法?
【问题讨论】:
安装虚拟机。为您的实时服务器设置一个类似的环境。在那里复制您的网站。编写单元测试,然后重构代码库。这样,您的实时站点不会受到损害,完成后您只需将新站点推送到生产站点。有关其他想法,请参阅sourcemaking.com/refactoring/… 【参考方案1】:如果我了解该代码库的总体质量水平,那么 没有办法一步步迁移到 MVC。这是不可能的。另一个坏消息是框架无济于事。他们不能神奇地将糟糕的代码库转换为类似于 MVCish 架构的东西。
相反,您应该专注于增量重构。您的目标应该是主要遵循SOLID 原则和LoD 的代码。当你重构你的代码时,架构会自己出现。 MVC 有许多变体和风格。
您可能想要查看的一个明确的事情是使用templates in php 的方式。检查代码,看看你必须改变什么来满足你的需要(这更多的是一个方向,而不是一个完整的解决方案)。请记住,在类似 MVC 的结构中,View 不是模板,而是 View 使用多个模板。
您可能会从中受益的另一件事是了解有关datamappers 的更多信息。实现它们将是朝着创建模型层方向迈出的良好一步。
哦..然后你可以看看几个一般的讲座(都是30分钟+):
Advanced OO Patterns Clean Code I: Arguments Clean Code III: Functions Don't Look For Things! Global State and Singletons Inheritance, Polymorphism, & Testing哦,this book 对重构大型 php 项目有一些见解。可能对你有用。
【讨论】:
所以根据您的经验,这将需要一个完整的并行重写,然后翻转开关并一次全部跨越? @AndrewHeath ,不,它需要增量重构:analyze > refactor > 测试 > 发布 > 重复【参考方案2】:我同意这里的其他建议,框架不会是一个神奇的解决方案。
但是从长远来看它会有所帮助。 我现在已经将一些mishmash站点转换为kohana框架,并且有以下经验。
最初我对 kohana 的了解不够,所以我在重新编写 mysite 时正在学习这一点。我最终停止了重写并从头开始编写一个全新的项目来学习 kohana,然后回到重写项目,现在我对框架有了更好的理解。
如果您不了解该框架,那么尝试使用它来转换旧项目将是一个陡峭的学习曲线
重写的第一步是将嵌入页面的所有业务/数据库逻辑拉到每个页面的顶部(在 html 输出之前)。所以我没有改变网站的流程/结构,只是将业务逻辑与显示逻辑分开。
在那之后,我有了一个具有易于阅读的业务逻辑的网站,只是在旧结构中,同时我也熟悉了旧代码库。
我所做的下一步是修复所有数据库结构问题,以便一切都处于第 3 范式(如果可能)。
我发现将旧代码修改为新的数据库结构更容易,然后在新框架中解决旧的数据库结构。 (kohana 主要是一个基于约定的框架,而不是配置,所以遵循这些约定很好,以简化长期维护)
无论框架如何,拥有良好的数据库结构都会让生活更轻松
下一步是选择网站的一部分进行替换。在 kohana 中设置路线,让 kohana 为项目的那一部分服务。 kohana(和其他框架毫无疑问)有一个后备,如果通过 url 请求的文件已经存在于站点上,那么 kohana 将不会处理该请求
由于您已将业务逻辑与 php 文件中的显示逻辑分开,因此只需将代码拆分为控制器和视图即可。对这两个部分进行更改以适应框架。在控制器/视图按预期工作后,您可以将业务逻辑拆分为模型/控制器
按照自己的方式浏览网站的该部分,直到完成。然后测试/启动/错误修复等
然后在网站的下一部分重新开始。
最终你会到达那里......
虽然重写花了很多时间,但对我来说这是值得的,因为这些网站现在更容易维护。 (显然增益量将取决于原始代码库的质量)
祝你好运
【讨论】:
【参考方案3】:这是可以做到的。如果在请求的路径中没有找到实际文件,您可以编写您的 mod 重写以仅重定向到 boot.php 或其他任何文件。这将允许您一次做一个部分。然而,确保所有链接都井井有条将是一场噩梦。
可能需要进行重写,然后从旧应用程序中复制并粘贴您需要的部分。
【讨论】:
以上是关于将实时站点迁移到 MVC 结构的策略?的主要内容,如果未能解决你的问题,请参考以下文章
将文件夹添加到 ASP.net MVC 5 站点中的所有 URL
cfc中的查询返回本地的[n]项,但在实时站点上重复第一个元素[n]次