当前位置: 首页 > 面试题库 >

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

端木冷勋
2023-03-14
问题内容

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

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


问题答案:

这完全取决于您的编码风格。这就是秘密: 用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)。



 类似资料:
  • 问题内容: 请提供有关如何为Java Web应用程序执行“插件”体系结构的建议。 当前,我们在Tomcat servlet容器中使用了非常简单和标准的Spring + Hibernate + Struts 2 。(内置Maven) 我需要像Redmine 这样的东西。可以启用/禁用,更新任何模块的位置Redmine UI 请排除OSGi,Portlet等繁重的选项。 OSGi太重,没有很好地采用W

  • 我正在facebook上构建自己的社交平台,欢迎对我的web应用程序的架构提出一些建议。 我需要一些从脸书API返回的数据,为了获得这些数据,我需要让我的用户登录脸书(OAuth 2.0)。这是我有点困惑的地方。 我应该从后端调用FacebookAPI(我使用的是Python),然后返回相同的数据作为响应吗? 我应该从前端调用Facebooks API(浏览器的Javascript ),然后将数据

  • M称为M odel V iew C ontroller或MVC,是用于开发Web应用程序的软件设计模式。 模型视图控制器模式由以下三个部分组成 - Model - 它是负责维护数据的模式的最低级别。 View - 它负责向用户显示全部或部分数据。 Controller - 它是一个控制模型和视图之间交互的软件代码。 MVC很受欢迎,因为它将应用程序逻辑与用户界面层隔离开来,并支持关注点的分离。 控

  • 22. Web MVC框架

  • 主要内容:模型,视图,控制器模型视图控制器(Model View Controller)或MVC,MVC是俗称,是一种软件设计模式,用于开发Web应用程序。模型 - 视图 - 控制器模式是由以下三个部分组成: Model - 模型是负责维护数据最低级别。 View - 这是负责向用户显示的全部或部分数据。 Controller - 软件代码,控制模型和视图之间的相互作用。 MVC是受欢迎的,因为它从用户界面层,应用逻辑隔离,

  • 这里我们提供了一个关于 Tendermint 区块链应用程序推荐架构的简要指南。 下图提供了一个极好的例子: 这里的最终用户应用程序是 Cosmos Voyager,在左下角。 Voyager 与本地轻客户端守护进程公开的 REST API 通信。轻客户端守护进程是一个特定于应用程序的程序,它与 Tendermint 节点通信,并通过 Tendermint Core RPC 验证 Tendermi