background image

度的控制是两大难点。分离页面设计与程序逻辑是最有效的解决方案

[3]。在 PHP Web 开发中,

通常采用模板技术分离显示和逻辑。对应于

MVC,模板解析引擎通常处于视图层。模板解析

引擎提供相对简单的模板语言

[4],以支持前端设计人员编写 HTML 模板。模板解析引擎可

以讲

HTML 模板编译成 PHP 脚本后直接运行。总的来说,PHP 框架的视图层通常采用类似

Smarty 的模板解析引擎驱动,以相对简洁的模板语言或直接采用 PHP 语言在模板中实现显
示逻辑,从而实现业务逻辑和前端展示的分离。

3.3 数据访问层。开发框架要解决的另一个主

要问题是在系统中将业务逻辑和数据相互分离。通常是使用数据访问层将程序与数据库分离。
数据访问层一般采用数据关系映射(

ORM)实现逻辑和数据的分离。ORM 使用元数据描述

对象和数据库之间的关系,并映射到数据库中

[5]。由于程序对象和关系数据库的映射较为

复杂,因此会造成比较严重的效率降低。从

PHP5 开始,ORM 逐渐被引入到 PHP 开发框架

的设计中。但现有的

PHP ORM 项目虽然都基本实现了对象关系映射,却普遍存在结构复杂、

效率低下的缺陷。

 

  为降低数据访问层的复杂性,在

PHP 框架设计中活动记录模式(ActiveRecord)逐渐

开始流行。

ActiveRecord 将每一条数据记录都包装为一个对象实例,这可以极大的提高数据

库相关程序的开发速度。然而,这种方式在处理关联表时,即使只提取一条记录,与之关联
的所有其他记录均会被包装为对象实例,这将会造成效率的急剧下降;对于需要频繁更新
数据的场景,由于所有的数据均需被封装为对象,更新对象属性后将对象存入数据库才能
完成数据更新。显然,在数据访问层中使用活动记录模式的效率仍不理想。

 

  对于轻量级的

PHP 框架,对数据库的操作跟适合采用更简化的数据库访问层方案。与

活动记录模式相比,表数据入口(

Table Data Gateway)模式仅对数据表实现封装,而不是

对封装每一个记录行。与

PHP 强大的关联数组相结合,表数据入口可以高效、灵活地操作大

量数据。由于不对记录进行封装,因此表数据入口操作的是纯数据,而非封装了数据的对象。
表数据入口模式可直接对数据库进行操作,这就决定了表数据入口模式具有很高的数据操
作效率。

 

  相对于

 Active Record 模式,Table Data Gateway 模式在数据表层面上封装数据操作,

更为简洁清晰,适合在轻量级的

PHP 框架中使用;由于复杂性降低,也可以大大降低用户

的学习成本;表数据入口不封装记录,因此可以直接操作数据库,且表数据入口模式中的
数据以数组的形式保存,利用

PHP 关联数组的优势,执行效率比活动记录模式高得多。总

的来说,轻量级

PHP 开发框架的数据访问层使用表数据入口模式实现,执行效率更高、学

习难度更低。

 

  

4 总结 

  总之,随着

PHP 语言的发展,尤其是 PHP5 在面向对象支持上的巨大飞跃,使得在

PHP 上实现 MVC 模式成为可能,但 PHP 语言的固有缺陷决定了完全的 MVC 模式在 PHP
上的效率较低且不易实现。较好的解决方案是基于被动

MVC、模板解析技术和 Table Data 

Gateway 模式的数据访问层来实现轻量级的 PHP 开发框架。 
  参考文献:

 

  

[1]贾广宇.MVC 设计模式下 Web 开发框架的研究与应用 [D].大连:大连海事大学 ,

2006. 
  

[2]任中方等.MVC 模式研究的综述[J].计算机应用研究.2004.10:1-4. 

  

[3]曾楠等.基于 MVC 模式的嵌入式 Web 设计方法[J].厦门大学学报.2006.2:196-198. 

  

[4]仝戈,张武装.Smarty 在基于 MVC 框架的 Web 应用程序开发中的应用[J].科技信

.2009.31:839-840.