首页 > 范文大全 > 正文

基于MVC模式的PHP开发框架研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于MVC模式的PHP开发框架研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:PHP是主流的Web开发语言之一,但是现有的PHP开发模式无结构化组织,将数据访问代码、逻辑处理代码和表示代码相互混合,带来了诸多问题,已经不能满足Web应用快速发展的需要。本文提出了一个MVC设计模式的PHP实现――FDF框架,给PHP开发者提供了一个Web应用程序框架,分离Web应用程序的数据、视图和控制,实现Web应用程序的松散藕合,从而提高Web应用程序的开发效率、可靠性、可维护性和可扩展性。

关键词:PHP 开发框架 MVC模式

1 概述

互联网迅速发展对Web应用程序的开发效率、可靠性、可维护性和可扩展性提出了更高的要求。PHP具有直观、易于上手,运行速度快,跨平台,开放源代码等优点[1][2],已经成为最重要的Web开发语言之一[3]。但是,现有的PHP开发模式将数据访问代码、逻辑处理代码和表示代码相互混合,无法满足Web应用快速发展的需要。

MVC设计模式对于生成有组织的模块化应用程序,是一种被证实了的有效的方法[4]。MVC设计模式可以将应用程序的数据(Model)、视图(View)和控制(Controller)相互分离,使得表现层能够从逻辑事务层分离出来,实现应用程序的松散的耦合,从而提高应用程序的开发效率、可靠性、可维护性和可扩展性。

2 框架的结构设计

2.1 框架体系结构

本框架采用五层B/S架构的MVC模式,web层对应视图和控制器,业务逻辑层和数据持久层由模型实现。模型(model)包括业务逻辑层和数据持久层,可分离业务逻辑和数据访问逻辑,并对业务逻辑层隐藏了数据库平台,使得各层功能简洁专一。

控制器(controller)包括前端控制器和动作控制器两部分,前端控制器是框架的唯一入口,用来决定下一个动作的实施,而动作控制器处理完整的请求并调用相应的模型生成可供view使用的数据。

视图(view)包括显示逻辑和模板两部分,负责解析显示模板生成特定的用户视图。

2.2 框架运作流程

客户端向服务器发出请求,服务器端使用唯一入口――前端控制器对用户的request进行Mapping,找到与用户request对应的action,动作控制器分析请求内容并调用适当的模型进行业务逻辑处理和数据访问,把处理结果发送到视图层,由视图层加载视图模板,处理显示逻辑并经前端控制器响应给用户。

3 框架的实现

3.1 视图技术

视图的关键是使用模板技术分离PHP代码和HTML代码[5]。在模板文件中将需要动态显示的内容定义成某种形式的变量,视图层处理完显示逻辑后将数据发送给模板解析引擎,替换模板变量生成最终的用户视图。

当Web服务器接到URL请求后,首先判断是否是第一次请求该URL。如果是,调用模板接口,交由模板解析引擎编译该URL所需的模板和代码文件,生成用户视图并输出;否则直接定位到已经存在的用户视图上。这样除了第一次编译成本比较高之外,其他的访问请求则省去了大量的重新解析和读取时间。框架还具有页面缓存技术[6]可以将页面生成静态缓存,使程序运行速度和效率得到更大的提高。

3.2 控制器设计

控制器负责接受用户请求、更新模型,以及选择合适的视图返回给用户。控制器有助于将模型层和视图层分离,从而在同一个模型的基础上开发多种类型的视图。

框架将控制器设计为两部分,前端控制器和动作控制器。前端控制器主要负责分析用户请求,并将用户请求转发给适当的动作控制器处理。动作控制器主要负责调用适当的模型生成供视图使用的数据。

前端控制器index.php是框架的唯一入口,通过配置Apache服务器的rewrite引擎可以确保所有的页面请求均传到前端控制器,从而实现框架的集中控制。因此,除分析转发用户请求外,前端控制器还可以很方便地实现认证(authorization)、日志(logging)和数据验证(validation)等功能。其关键代码如下所示:

$action = $bd->make('ev',$bd)->get(HH);// 获取页面参数

if(!$action)$action = 'index';// 默认控制器

if(file_exists(CA.$dir.$action.'.action.php')) {//检查控制器是否存在

if($action != 'index')include CA.$dir.$action.'.action.php';// 加载动作控制器

return new $action($bd);// 返回动作控制器实例

}

动作控制器是客户请求和业务逻辑处理之间的一个适配器,将请求与业务逻辑分开。动作控制器由一组*.action.php文件实现,所有动作控制器均派生自抽象类ActionControllerBase,其抽象方法display()用于向视图传送数据。

Abstract class ActionControllerBase{

public $bd;

public $lang;

public function __construct(&$bd){

//…

}

// …

Abstract function display();

}

3.3 数据操作

PHP支持的数据库极其广泛,然而PHP提供的数据库接口支持不统一[7]。框架采用PDO(PHP Data Object)作为数据库操作抽象层的基础,以增强程序代码的可移植性。PDO旨在为多数关系数据库API中的通用功能提供一致的API。这大大简化了PHP程序(通过封装差别,在一个通用的API下支持不同的数据库)的开发。

框架还对常用数据库操作如SELECT,INSERT,UPDATE,DELETE等进行了简单封装,使得数据库操作进一步简单化,开发者可以无需考虑SQL语句的具体的语法,而仅仅需要参考自己需要操作的数据库表,以及所需要操作的数据库的字段。这样开发者可以将更多的精力放在考虑业务逻辑上,而不是考虑SQL的语法上。同时这样的封装还可以减少程序书写中出错的概率,也减少了调试中出错的几率。

4 总结

FDF框架是一种基于mvc模式的Web应用开发框架,它完成了用户界面和业务逻辑的分离,为系统开发提供了基本的实现方法和清晰的设计框架。与传统的开发方式相比,使用FDF框架开发的Web应用系统可以将模块功能限制在局部范围内,降低系统的耦合度,提高系统性能、可维护性和代码的复用率,从而提高Web系统的开发效率。

参考文献:

[1]Bisson S.,An introduction to php[J].Application Devel

opment Advisor,May 2002,6(4):38~41.

[2]Gamrat B.,PHP and preprocessed Web pages[J].Dr.Dobb’S Journal,January 2006,31(1):46~48.

[3]中国互联网络信息中心.第25次互联网络发展状况统计报告[R].

[4]Hofmeister C.,Nord R.L.,Soni D.,Applied Software Architecture[M].Addison Wesley,2000.

[5]李涤.基于PHP的中文模板技术的研究[D].重庆大学,2004.

[6]苏韶生,罗平.基于PHP技术的页面缓存的实现[J].计算机时代,2005,55-56.

[7]张亚氢.基于PHP的通用数据库接口技术的研究[D].重庆大学,2004.