MVC真的适合PHP么?

近来设计模式风行,MVC随处可见,PHP领域也不例外,很多论坛都开始讨论在PHP中使用MVC。然而,M、V、C在PHP中到底该如何实现?MVC真的适合PHP么?这里Easy给出一些自己的思考。
近来设计模式风行,MVC随处可见,PHP领域也不例外,很多论坛都开始讨论在PHP中使用MVC。然而,M、V、C在PHP中到底该如何实现?MVC真的适合PHP么?这里Easy给出一些自己的思考。
MVC的原型      伯爵娱乐城
MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。
JAVA中的MVC
JAVA把MVC引入了Web领域,并在此基础上架构出了一套称为Model2的体系。由于Web的特殊性,JAVA中的MVC和Desktop中的MVC并不完全一致。主要原因是Web中的V不是持续的,用户每访问一次,V就要重新生成一次,所以V始终是和M一致的,不需要C来控制同步。那么 JAVA中的C在干什么?JAVA中的C通常用于流程的转向,其实用的是Dispatch模式,不再是Desktop中的C了。
PHP中的MVC
要在PHP中原封不动的COPY JAVA的MVC是不可能的。问题主要表现在M上,在JAVA中,M是独立于业务逻辑和表现逻辑的数据模型,在服务器端跨页面存在,JAVA Bean扮演的就是这个脚色。而PHP进程并不长时间驻留于内存,只在PHP页面开始执行时创建,在页面解释执行结束时就已经结束。在这样的情况下,我们根本无法直接实现M。所以所有声称实现了MVC模式的PHP程式都只能通过模拟手段来实现M。实现的方式一般是在当前页面结束前把数据存入数据库或者 cookie/session,在下一个页面中再透过数据库或者cookie/session重建M。这样的方式和JAVA中的Bean比起来可以说是开销巨大,本来往内存中写数据的简单操作现在要从服务器端传到客户端或者数据库,然后再传回来。与其用这么大的开销来维护一个数据模型再在最后把这个模型塞回数据库,还不如直接根据需要更新数据库里边的数据。
现在PHP中的MVC架构可以用下图来表示。

然后我们再来看V。现在很多PHP程序简单的使用了一些模板技术就在说明中写“采用MVC架构”。其实绝大多数的PHP模板程序都只是分离HTML 和PHP的,而非MVC强调的显示逻辑和业务逻辑分离。一个混用HTML和PHP的页面一样可以是MVC的一部份。如何分离显示逻辑和业务逻辑至今没有一个满意的方案。至于C,和JAVA中差不多,还是被用作转向,这个在PHP中其实并不重要。

一个极耗资源的M + 一个区别不大的V + 可有可无的C 构成了PHP中所谓的MVC。
基于以上分析,Easy认为,PHP原有的3层构架比所谓的MVC更为高效,而3层构架中的表现层要解决的问题MVC中的V也同样存在。一个改进后的3层架构比MVC更适用于PHP。

MVC真的适合PHP么?

时间: 2024-08-10 21:28:17

MVC真的适合PHP么?的相关文章

微服务,真的适合你么?

1.什么是微服务? 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服务仅关注于完成一件任务并很好地完成该任务.微服务架构模式(Microservices Architecture Pattern)的目的是将大型的.复杂的.长期运行的应用程序构建为一组相互配合的服务,每个服务都可以很容易做局部修改.微服务架构带来可独立部署.高扩展与伸缩.自由选择开发语言.高效利用资源.故障隔离等优点,同时也因为服务多带来分布式事务

BAT的真的适合创业团队吗?

平时在公司扮演一个逗比得角色和亲爱的们友好相处的我根本不愿意去思考这么深入的课题.本来在上一家公司就涉及的太深,心爱的一条小产品线被咔掉后心疼不已.只想深入研究技术不问世事了.怎奈何突然有一天说要招一个项目管理职位的人进来,专门做的事情就是更新和管理项目进度.我当时十分疑惑后,就开始了找个思考的历程. 大公司病? “难道不是产品经理需要管理这个事儿吗”?小创业公司里,不是产品经理需要把从老板.市场和运营的人的一堆破事儿都收集整理了,然后去其糟粕.留其精华,转化为需求文档和原型交给开发,然后管理开

你真的适合做软件开发吗

前段时间一个朋友跟我说,他说做软件开发不仅累,而且从来不跟人接触,整天要对着电脑研究代码.整个人都完全脱离社会了,自己都快变成代码了. 我笑着以一个过来人的身份对他说,你现在后悔了吧?!天下没有后悔的药,若想不后悔,就必须对将来要做的事情有个了解,这就好比商人投资某个项目一样,必须做好深入的考察后,才能进入,否则就凭着一腔热情,失败在所难免. 软件开发行业曾一度被各大媒体报渲染我21世纪的昭阳产业,人才缺口达到多少多少等等.听的大家是蠢蠢欲动,摩拳擦掌恨不得卯足劲冲进去好好干一番事业.然后各种媒

[转]从三层架构到MVC,MVP

本来是不想跳出来充大头蒜的,但最近发现园子里关于MVC的文章和讨论之风越刮越烈,其中有些朋友的观点并不是我所欣赏和推荐的,同时最近也在忙着给公司里的同事做MVC方面的“扫盲工作”.所以就搜集了一些大家接触MVC的过程中经常出现的问题做了一下解释说明,希望能与大家多多交流,呵呵. 当然这种架构模式本身的一些问题也会在接下来的内容就加以介绍,另外就是如果大家有什么不同观点的话,欢迎拍砖(只要不打脸就行,呵呵). 一.  MVC是谁提出的         模型-视图-控制器(MVC)是Xerox PA

ASP.NET MVC验证标注的扩展-checkbox必选

我们知道ASP.NET mvc提供一些表单的验证标注,比如必填属性RequiredAttribute 但是这个属性不适合选择框的必选 但是很多时候,我们却是需要一些必选的单选框 比如网站注册的时候,需要用户同意网站的一些规定等等 为此,我封装了一个BooleanRequiredAttribute的标注类, 该类可以标注那些框必填 具体类如下: public class BooleanRequiredAttribute : ValidationAttribute, IClientValidatab

深入了解MVC(转)

MVC无人不知,可很多程序员对MVC的概念的理解似乎有误,换言之他们一直在错用MVC,尽管即使如此软件也能被写出来,然而软件内部代码的组织方式却是不科学的,这会影响到软件的可维护性.可移植性,代码的可重用性. MVC即Model.View.Controller即模型.视图.控制器.我在和同行讨论技术,阅读别人的代码时发现,很多程序员倾向于将软件的业务逻辑放在Controller里,将数据库访问操作的代码放在Model里. 最终软件(网站)的代码结构是,View层是界面,Controller层是业

MVC概述

学习MVC模式   一.MVC简介 MVC是Model-View-Controller的简称,即模型-视图-控制器.MVC是一种设计模式,它把应用程序分成三个核心模块:模型.视图.控制器,它们各自处理自己的任务. 1.模型(Model) a.模型是应用程序的主体部分,模型表示业务数据和业务逻辑. b.一个模型能为多个视图提供数据. c.由于应用于模型的代码只需写一次就可以被多个视图重用,所以提高了代码的可重用性. 2.视图(View): 简单来说就是在页面上填写java代码实现显示. 详细来说视

Java的MVC模式简介

Java的MVC模式简介 MVC(Model View Control)模型-视图-控制器 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller),即为MVC.它是一种软件设计的典范, 一.MVC与模板概念的理解 MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个

001.MVC基本概述

MVC的基本概念 一.NET平台下开发web应用程序的方案(方法) 方案A:ASP.NET webForm1.web窗体:臃肿(胖)性能低 优点:有很多的web控件可以使用,能够方便的和服务端交互(数据库)怎么做:见ppt5 2.html :干净(瘦)性能高 缺点:只能使用html元素[客户端控件] ajax+自定义处理程序 3.razor页面 干净(瘦) 性能高 优点:使用html客户端控件本意:剃须刀! 方便和服务端交互:html辅助方法 不支持试图状态 方案B:ajax+自定义处理程序(前