PHP:MVC迷思

转载 2006年06月11日 11:49:00
近来设计模式风行,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的一部份。如何分离显示逻辑和业务逻辑至今没有一个满意的方案。我个人则比较认同http://www.phpe.net/articles/384.shtml的实现方案。至于C,和JAVA中差不多,还是被用作转向,这个在PHP中其实并不重要。


一个极耗资源的M + 一个区别不大的V + 可有可无的C 构成了PHP中所谓的MVC。

基于以上分析,Easy认为,PHP原有的3层构架比所谓的MVC更为高效,而3层构架中的表现层要解决的问题MVC中的V也同样存在。一个改进后的3层架构比MVC更适用于PHP。

PS:有的方案把业务逻辑并入M中(http://www.phpe.net/articles/382.shtml),这其实是MVC的思想背道而驰的。

00003 不思议迷宫.0002:修改Lua,虽然实际上没什么卵用

00003 不思议迷宫.0002:修改Lua,虽然实际上没什么卵用 上一章我们解密了lua脚本,这一章我们试图修改lua脚本,看能有什么效果。 玩游戏天天签到,就为了了那些签到奖励。我们...
  • tiewen
  • tiewen
  • 2017年02月15日 13:24
  • 2625

00003 不思议迷宫.0001:解密Lua脚本

 00003 不思议迷宫.0001:解密Lua脚本 《不思议迷宫》是我想要重点研究的游戏之一。之所以说是重点,是因为我最近一直在玩它,并且花的时间还比较多。虽然严格来说,它并不怎么样...
  • tiewen
  • tiewen
  • 2017年02月14日 20:29
  • 1842

00003 不思议迷宫.0003:玩家数据真的就不能改了吗?

 00003 不思议迷宫.0003:玩家数据真的就不能改了吗? 玩家数据保存在服务器的数据库里,这使得我们没办法直接修改它。那间接的呢? 在以前,iOS上有一些内购插件,据说可...
  • tiewen
  • tiewen
  • 2017年02月17日 15:34
  • 2568

数据绑定迷思,暨 MVC 与 MVVM 傻傻分不清

根据之前的制作方式,我总结有这么几种数据绑定方式:一、服务器端 JSP 生成。读取接口 JSON 数据然后拼凑 HTML,这是方式安利应该是最快的,因为 JSP 和 数据库都在服务器本地。但因为 HT...
  • zhangxin09
  • zhangxin09
  • 2014年12月30日 10:20
  • 2593

高煥堂_免費視頻課程_Part_01_bb_抽象的迷思

  • 2015年09月24日 08:31
  • 35.65MB
  • 下载

高煥堂_免費視頻課程_Part_01_aa_抽象的迷思

  • 2015年09月24日 08:28
  • 17.47MB
  • 下载

IT 行业的创新 - 创新的迷思 (1-4)

[这是和北大同学交流的讲稿,  暑期课程-职业规划与领导力发展  课程的一部分]   Myths of innovation 创新, 创新型人才, 创新型企业, 创新型国家,  这些都是最近时髦...
  • u014729383
  • u014729383
  • 2014年04月15日 15:51
  • 244

第2章 魅力领导的迷思

托尼•罗宾斯(Tony Robbins)  UPW激发潜能 作者亲历营销 从个性文化发端起,我们就出于种种自私的原因,陷入了被迫发展成外向性格的境地——为了在一个全新的带有匿名性且竞争...
  • u011779724
  • u011779724
  • 2017年06月03日 22:28
  • 95

行业APP的迷思:APP该如何进行运营策略

并非所有APP都能攫取理想的商业利益,APP的角逐犹如比赛一样,有人晋级自然就有人淘汰。在苹果应用程序商店Appstore,有120多万个APP。能从中脱颖而出成为苹果年度最佳应用的,屈指可数。 含...
  • triedtech
  • triedtech
  • 2014年07月24日 11:33
  • 288

走好职场每一步:关于求职技巧、跳槽迷思、职场困惑

本文整理自UC问啊–资深HR悦鸣回答网友的问题hr说最迟第二天给回复,却没回复,是企业道德问题吗?HR说最迟第二天回复,却没回复的原因可能有如下几点:1. 用人部门还在考虑, 没有做出最终决定,需要...
  • mikedadong
  • mikedadong
  • 2015年12月13日 13:09
  • 483
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP:MVC迷思
举报原因:
原因补充:

(最多只允许输入30个字)