一尘不染

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

php

我一直在为我的新工作学习Zend及其MVC应用程序结构,发现与它一起工作只会使我感到困扰,原因是我无法完全动手。然后在学习过程中,我遇到了诸如MVC:NoSilverBullet之类的文章,以及有关MVC和Web应用程序的播客。播客中的那个人非常反对将MVC作为Web应用程序体系结构,并钉住了很多困扰我的东西。

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


阅读 389

收藏
2020-05-26

共1个答案

一尘不染

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

任何声称可以做到的框架都是在骗你。现实是框架本身甚至无法实现MVC,而您的代码可以。我想这并不是一个很好的市场推广。

要实现经典的MVC,首先需要您拥有持久的模型。此外,Model应该将有关更改(观察者模式)的信息通知给View,这在原始PHP页面中也是不可能的(如果使用套接字,则可以做一些与经典MVC相似的操作,但这对于实际网站而言是不切实际的)。

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

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

  • MVVM :控制器换成ViewModel,后者负责View的期望值与Models的逻辑之间的转换。查看来自控制器的请求数据,该数据将转换请求,以便模型可以理解它。

当您无法控制视图或模型层时,通常会使用此方法。

  • MVP (php框架称为“ MVC”):演示者从Model请求信息,收集信息,对其进行修改,然后将其传递给被动视图。

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

  • HMVC (或PAC):与Model2不同,其控制器具有执行子控制器的能力。每个都有自己的M,V和C三元组。您可以获得模块化和可维护性,但在性能上有所损失。

无论如何。最重要的是:您还没有真正使用过MVC。

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

  • 事件驱动架构
  • n层架构

然后总是存在DCI范式,但是将其应用于PHP时会遇到一些问题(您不能在PHP中转换为类..如果没有丑陋的hacks)。

2020-05-26