我一直在为我的新工作学习 Zend 及其 MVC 应用程序结构,并且发现使用它只是因为我无法完全理解的原因而困扰我。然后在我的学习过程中,我遇到了诸如 MVC: No Silver Bullet 之类的文章。和 this podcast关于 MVC 和 Web 应用程序的主题。播客中的那个人很好地反对 MVC 作为 Web 应用程序架构,并指出了很多困扰我的问题。
但是,问题仍然存在,如果 MVC 真的不适合 Web 应用程序,那么什么才是?
最佳答案
这完全取决于您的编码风格。这是 secret :用 PHP 编写经典 MVC 是不可能的。
任何声称你可以的框架都是在骗你。事实上,框架本身甚至无法实现 MVC——您的代码可以。但我猜这不是一个很好的营销策略。
要实现经典 MVC,您首先需要拥有持久模型。此外,Model 应该通知 View 有关更改(观察者模式),这在您的 vanilla PHP 页面中也是不可能的(如果您使用套接字,您可以做一些接近经典 MVC 的事情,但这对于真实网站来说是不切实际的)。
在 Web 开发中,您实际上有 4 个其他受 MVC 启发的解决方案:
Model2 MVC:View 正在从 Model 请求数据,然后决定如何呈现它以及使用哪些模板。 Controller 负责更改 View 和模型的状态。
MVVM:Controller 换成了 ViewModel,ViewModel 负责 View 的期望和 Models 的逻辑之间的转换。查看来自 Controller 的请求数据, Controller 翻译请求以便模型可以理解它。
大多数情况下,当您无法控制 View 或模型层时,您会使用它。
MVP(php 框架称为“MVC”):Presenter 从 Model 请求信息,收集信息,修改信息,并将其传递给被动 View。
要探索这种模式,我建议您从 this publication 开始.会详细解释的。
HMVC(或 PAC):与具有 Controller 执行子 Controller 能力的 Model2 不同。每个都有自己的 M、V 和 C 三元组。您获得了模块化和可维护性,但付出了一些性能损失。
无论如何。底线是:您还没有真正使用过 MVC。
但是如果你厌倦了所有类似 MVC 的结构,你可以看看:
- 事件驱动架构
- n 层架构
然后总是有 DCI范例,但它在应用于 PHP 时存在一些问题(您不能转换为 PHP 中的类......并非没有丑陋的黑客)。
关于php - 比 MVC 更适合 Web 应用程序的架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7621832/