基于PHP的新Web开发框架

    最近因为要对一个项目进行重构,所以一直在研究PHP框架。大体看了看Zend Frameworks,仔细学习了下symfony,发现一个良好的MVC Web框架,足以改变开发习惯。但是无论是Zend Frameworks还是symfony,对于中小型项目的开发来说都过于臃肿,并不能很好的提升开发效率。在symfony中,一个PHP工程被分为项目/应用程序/模块的层次,对于扩展性要求比较高的大型PHP项目来说,这是一个很好的选择。国外框架在国内难以普及,很大一点障碍就是中文文档少,工程师培训成本较高。中小型项目则更期望一种高效的能够快速进行开发的PHP框架。

    先来看MVC模式。做JAVA的朋友可能对MVC模式比较了解,对于大多数PHP程序员来说,很少听说PHP上实现MVC的项目,或者说使用MVC模式的PHP项目无一例外的是一些大型企业级项目。由于MVC模式结构较为复杂,并不太适合中小型项目,所以我们需要一种全新的模式来审视PHP开发框架。

    一个项目使用框架,其主要目的就是简化开发,提高效率,同时提升程序本身的可扩展性,以便在客户需求发生变化时调整应用程序。同时框架的选择也应当考虑成本问题,即选择的框架是不是能够真正降低这个应用程序的开发和运营成本。对于中小型项目来说,开发人员希望能够快速地完成开发任务,客户则希望产品维护扩展方便、具有较高的效率。虽然像symfony这种框架能够实现相当强的可扩展性,但对于中小型项目来说,使用如此巨大的框架所需投入的开发成本、培训成本、维护成本都是巨大的。因此MVC的经典框架并不适用于中小项目的需求。

    那么,怎样才能解决成本、效率、效率、可扩展性直接的矛盾呢?我们需要一种全新的Web框架设计思路。

    对于一个中小型项目,需求往往较少,或者比较单一,但共同的地方无外乎三点:基本业务逻辑、用户管理、表现。我们将Web应用程序从B/S模型中抽取出来,作为一个独立的对象。这个对象对外的联系有三个——输入、输出、数据仓库。输入输出是基于HTTP协议而实现的,因此我们可以将其封装在同一个类中,这个类将作为Web应用程序获取、输出数据的基础。我们把它叫作Interface(接口)。接口主要将Web应用程序和服务器之间的交互隔离开来,以便进行数据的基础处理。在接口中将完成用户数据的收集和预处理(提取相应模块、动作名称,过滤非法字符、URL路由等等),输出应答的准备和封装(应答HTTP头、模板处理、XHTML、XML、JSON)两个任务。

    接口将用户请求分为两类,一类为命令,一类是数据。请求将会被传送到控制器中,用以控制调用相应的动作和模型,对具体业务进行处理,同时,位于更高层的系统类则可从中提取用户信息,来控制加载诸如系统设置、用户权限等等。

    用户命令交给控制器后,控制器调用相应的动作,由动作调用相应的模型进行具体业务处理。模型通过继承数据库抽象类,实现与数据库的操作,通过接口的方式获取系统设置、用户权限等等。

    整个框架的接口、控制器、数据库抽象是不变的,而动作组和模型组是可插拔的,也就是说,业务逻辑的变化只涉及到动作组和模型组的修改。这种类似于刀片服务器的设计可以很方便地扩展或者修改程序。这种设计思路不同于MVC模式和三层模式,它具有更高的灵活性,更加适用于中小型项目的快速开发。

    当然,这种设计思路目前仅仅停留在理论上,而且没有实现代码可供研究,本文也仅仅算是抛砖引玉,为中小型PHP项目的快速开发提供一个“非主流”的思路。