skip to content

前段时间在学习 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 部分的核心,而这篇文章的作者所指出的类似于JSPJava 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 的最大需求——面向对象。