架构比MVC更适合Web应用程序?

我一直在为我的新工作学习Zend及其MVC应用程序结构,并发现使用它只是困扰着我,因为我无法完全理解的原因。然后,在我的学习过程中,我遇到了诸如MVC:没有银弹之类的文章,以及这个关于MVC和Web应用程序主题的播客。播客中的那个家伙很好地反对MVC作为Web应用程序架构,并钉死了很多困扰我的东西。

但是,问题仍然存在,如果MVC并不适合Web应用程序,那么什么是?


答案 1

这完全取决于您的编码风格。秘诀是:用PHP编写经典的MVC是不可能的。

任何声称你可以的框架都在骗你。现实情况是,框架本身甚至无法实现MVC -- 你的代码可以。但我想,这并不是一个好的营销宣传。

要实现经典的MVC,您需要首先使用持久模型。此外,Model应该通知View有关更改(观察者模式)的信息,这在您的普通PHP页面中也是不可能的(如果您使用套接字,则可以做一些接近经典MVC的事情,但这对于真正的网站来说是不切实际的)。

在Web开发中,您实际上还有其他4种受MVC启发的解决方案:

  • Model2 MVC:View 从模型请求数据,然后决定如何呈现数据以及使用哪些模板。控制器负责更改视图和模型的状态。

  • MVVM:控制器被换成ViewModel,它负责View的期望和模型的逻辑之间的转换。查看来自控制器的请求数据,这会转换请求,以便模型可以理解它。

    大多数情况下,当您无法控制视图或模型层时,会使用它。

  • MVP(php框架称之为“MVC”):表示器从模型请求信息,收集信息,修改信息,然后将其传递给被动视图。

    为了探索此模式,我建议您从本出版物开始。它将详细解释它。

  • HMVC(或PAC):与Model2不同,控制器能够执行子控制器。每个都有自己的M,V和C三元组。您可以获得模块化和可维护性,但会因性能受到一些影响而付出代价。

无论如何。底线是:你还没有真正使用过MVC。

但是,如果您厌倦了所有类似MVC的结构,则可以查看:

  • 事件驱动架构
  • n 层体系结构

然后总是有DCI范式,但是当应用于PHP时,它有一些问题(你不能在PHP中转换为类......没有丑陋的黑客)。


答案 2

根据我的经验,在为Web开发时,您从MVC架构中获得的好处远远超过其成本和明显的开销。

对于从复杂的MVC框架开始的人来说,做出额外的努力来分离三层,并很好地感觉到什么属于哪里(有些事情是显而易见的,有些可能是相当边缘的,往往是很好的讨论话题),这可能有点令人生畏。我认为从长远来看,这种成本是可以收回成本的,特别是如果你期望你的应用程序在一段合理的时间内增长或维护。

我遇到过这样的情况:由于层的良好分离,创建新API以允许其他客户端连接到现有Web应用程序的成本非常低:业务逻辑根本没有连接到演示文稿,所以它是蛋糕。

在当前的MVC框架生态系统中,我相信您的里程可能会有很大差异,因为原理很常见,但是Zend,Django,RoR和SpringMVC之间存在很多差异。

如果真的有其他好的替代方案来替代这种范式......我对答案很感兴趣!

抱歉,文字墙很小!


推荐