前段时间在学习Java,顺水推舟得学了MVC构架。在网上查阅相关资料的时候,发现对于PHP是否以及怎样套用MVC构架,已经有相当多的探讨。以下给出几个链接:
这几篇文章(以及相关的评论)几乎包含了所有PHPer对于MVC构架的认识和疑惑。在我实践使用MVC构造了一个站点之后,可以说对于PHP中的MVC有了自己的一些认识:
MVC是面向对象思想的集中体现。特别是模块(Model)的封装、抽象,运用得好就能将OO的封装、多态性表现得淋漓尽致。至少Web应用上,MVC肯定是先进的,甚至我个人认为小型的PHP站点也应采用MVC的构架。
中大型站点一定需要MVC架构。PHP在企业级应用上如此至少,除去商业界和开原界在意识形态上有巨大分歧外,PHP本身的极弱面面向对象的缺陷也是最大的原因。道理很简单,不是高度面向对象的项目,越是大型,维护成本越是成几何级数上升。
那到底该怎么运用MVC呢?应该说对于不同类型,不同规模,不同开发周期,不同维护费用预算,都可以有不同的具体实现。但是有一点是肯定的:并不像《PHP:MVC迷思》所说的“把业务逻辑并入M中,这其实是MVC的思想背道而驰的。”——业务逻辑绝对应该是Model部分的核心,而这篇文章的作者所指出的类似于JSP中Java Beans的作用,只是Model部分最底层的抽象,如果就此理解,那MVC的确不应该应用于PHP了(相信作者肯定没使用过structs)。实际上,判断MVC是否强壮,就是看业务逻辑部分的抽象和封装是否到位。Smarty模版引擎的最大特点就是将业务逻辑从视图中分离,因此说他的思想是最前卫的。以我的看法,Smarty就是在PHP中最大程度地实现JSP的自定义标签库(Custom Taglib),当然,两者还是有很大不同的,这个也只是我个人的理解。如果还不能理解业务逻辑为什么是属于Model部分,那还是先看看一些面向对象的教科书吧。
BTW:4月25日PHP5出了第二个Candidate版本,虽然对于PHP的前景,尤其是php5大量借鉴Java的特点还有很大的争论,但是我认为PHP5无疑会大大延长其寿命,至少让我在做项目的时候会犹豫到底是JSP还是PHP……PHP5也体现了绝大多数程序员对于PHP的最大需求——面向对象。