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

Gor*_*onM 48 php architecture model-view-controller web-applications

我一直在为我的新工作学习Zend及其MVC应用程序结构,并发现使用它只是困扰我,原因是我无法完全理解.然后在学习过程中,我遇到了一些文章,如MVC:No Silver Bullet以及关于MVC和Web应用程序主题的播客.播客中的那个人对MVC作为一个Web应用程序架构提出了非常好的理由,并且扼杀了许多让我烦恼的东西.

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

ter*_*ško 104

这一切都取决于你的编码风格.这是秘密:用PHP编写经典MVC是不可能的.

任何声称你可以使用的框架都在骗你.实际情况是框架本身甚至无法实现MVC - 您的代码可以.但我认为这不是一个好的营销宣传.

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

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

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

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

    当您无法控制任何视图或模型层时,通常会使用此选项.

  • MVP(php框架称之为"MVC"):Presenter从Model请求信息,收集信息,修改它,并将其传递给被动视图.

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

  • HMVC(或PAC):与Model2的不同之处在于控制器执行子控制器的能力.每个都有自己的M,V和C三元组.你获得了模块化和可维护性,但是在性能方面有所收获.

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

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

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

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

  • 在经典MVC中,视图观察模型*(或模型层的结构,确切地说)*.当模型状态发生变化时,视图会请求新信息.对于"持久模型",我的意思是模型层存在都考虑了应用程序的使用.这在PHP中是不可能的,因为当您发送响应时,模型层中的实例将被销毁.这是PHP的*Share-Nothing*架构的约束.观察模型层是无法观察的.没有什么可留下来观察的. (7认同)
  • 作为旁注:有(或多或少)复杂的解决方案在php中启用持久会话,这反过来将允许我们创建持久模型.这是我熟悉的解决方案:http://us2.php.net/manual/en/intro.memcache.php (2认同)

pca*_*cao 5

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

对于刚开始使用复杂的 MVC 框架的人来说,付出额外的努力来分离三层并很好地了解什么属于哪里(有些事情是显而易见的,有些事情可能相当边界)可能有点令人畏惧并且往往是很好的讨论话题)。我认为从长远来看,这种成本是值得的,特别是如果您期望您的应用程序在合理的时间内增长或维护。

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

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

如果真的有其他好的替代方案可以替代这个范例......我对答案很感兴趣!

抱歉,文字墙有点小!