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的结构,您可以查看:
然后总是存在DCI范例,但是当它应用于PHP时它有一些问题(你不能在PHP中转换为类...而不是没有丑陋的黑客).
根据我的经验,在进行 Web 开发时,从 MVC 架构中获得的好处远远超过其成本和明显的开销。
对于刚开始使用复杂的 MVC 框架的人来说,付出额外的努力来分离三层并很好地了解什么属于哪里(有些事情是显而易见的,有些事情可能相当边界)可能有点令人畏惧并且往往是很好的讨论话题)。我认为从长远来看,这种成本是值得的,特别是如果您期望您的应用程序在合理的时间内增长或维护。
我曾经遇到过这样的情况:创建一个新的 API 来允许其他客户端连接到现有的 Web 应用程序的成本非常低,这是由于各层之间的良好分离:业务逻辑根本没有连接到演示文稿,因此这是蛋糕。
在当前的MVC框架生态系统中,我相信您的里程可能会有很大差异,因为原理是通用的,但例如Zend、Django、RoR和SpringMVC之间存在很多差异。
如果真的有其他好的替代方案可以替代这个范例......我对答案很感兴趣!
抱歉,文字墙有点小!