APP下载

基于ThinkPHP 与ZendAMF 框架的Flex 开发

2012-09-12林文如

重庆高教研究 2012年5期
关键词:服务端控件视图

刘 镭,林文如

(1.福建师范大学信息技术学院,福建 福州 350007;2.闽江学院计算机科学系,福建 福州 350108)

从MVC的角度看,Flex只是一个客户端表现层(即View),要真正地实现数据处理,就必须与服务端程序进行交互[1].在Flex中运用ZendAMF框架进行通信的应用研究较少[2].本文将研究和探讨在ThinkPHP中整合ZendAMF框架的方法和实例,为基于Flex的富客户端应用提供数据交互的能力.

1 开发框架简介

ThinkPHP是一个免费开源的、快速简单的、面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,是为了敏捷Web应用开发和简化企业应用开发而诞生的,并且集成了许多第三方类库[3].

AMF协议是Adobe公司的Action Message Format协议的简称[4],主要用于数据交互和远程过程调用,在功能上与WebService相当,但AMF与WebService中的XML不同,AMF是二进制数据,而 XML是文本数据,AMF的传输效率比XML高[5].本文所整合的是基于 AMF协议的ZendAMF,该框架在执行效率、稳定性各方面均有较大优势.

Flex是一个高效、免费的开源框架,可用于构建具有表现力的Web应用程序.这些应用程序利用 Adobe Flash Player和 Adobe AIR,运行时跨浏览器、桌面和操作系统,实现一致的部署.

2 开发框架整合

如上所述,ThinkPHP、ZendAMF、Flex三者之间具有各自的优势,那么如何整合3个框架,为企业级应用提供一种敏捷的开发方案,是一个急需解决的技术问题.

2.1 整合思路及方法

ThinkPHP是一个服务端开发框架,封装了CURD和一些常用操作,在查询语言、自动验证、视图模型等方面均有独特的表现,即在设计控制器(Controller)与模型(Model)方面具有很强的处理能力,但富客户端界面视图(View)方面的表现则不尽如人意.

ZendAMF也是一个服务端开发框架,本身并没有处理客户端界面视图方面的能力,但它内置了Flash对象,可以将服务端的Object、Array、Date、XML等数据传回服务器端,在服务器端自动解析成适当的对象,这就减轻了开发人员繁复的工作负担,同时也节省了开发时间.

Flex是一个富客户端开发框架,先天就缺少服务端控制器、模型方面的能力,但在界面视图方面却有独具一面的优势.

整合3个框架的思路是:将3个框架各自的优点抽取出来,分别扮演M(模型)、V(视图)、C(控制器)的角色,即ThinkPHP扮演控制器及模型的角色,ZendAMF扮演控制器网关的角色,Flex扮演视图的角色.

2.2 整合后的开发框架

根据以上分析的结果,整合后的开发框架如图1所示.

图1 框架整合图

如图1所示,整合后的框架使用Flex来代替ThinkPHP的视图(View)部分,Flex负责前端的用户交互,ThinkPHP负责服务端的业务逻辑(Controller)和数据处理(Model),ZendAMF的AMF网关负责架起Flex与ThinkPHP之间通信的桥梁,通信的方式为Remote Object.用Remote Object格式来传递数据,适用于大数据量通信的PRC服务.

框架的操作流程为:Flex客户端通过ZendAMF网关向ThinkPHP控制器发送请求,Think-PHP控制器根据接收到的请求命令向ThinkPHP模型发送数据处理指令,ThinkPHP模型通过ThinkPHP内置的数据库接口向数据库请求数据,数据库返回的数据通过上述路线原路返回给Flex客户端界面.

3 应用实例

3.1 实例概述

为了简明扼要地介绍3种框架整合技术的实现,又不失一般性,本实例将实现一个简单的留言板功能模块,包括写留言、查看留言2项操作.

3.2 开发环境

在Windows平台下,使用如下开发环境:Apache 2.2.17+PHP5.3.3+MySQL5.5.8+ThinkPHP2.1+ZendAMF 1.1.1+ZendStudio 9.0.1+Adobe Flash Builder 4.5.

3.3 实例实现

数据库设计:在MySQL数据库中新建一个表guestbook,包括 3 个字段:id、title、content.

在ZendStudio中新建一个本地PHP项目guestbook,系统自动在web服务器的根目录下建立一个guestbook文件夹及index.php等文件,将ThinkPHP框架目录复制到guestbook文件夹内,并在项目根目录下新建一个www文件夹.

将ZendAMF框架复制到ThinkPHPVendor目录下(注:ThinkPHP完整版中包含的 Zend-Framework已经包含了 ZendAMF).打开 index.php文件,ThinkPHP的入口文件一般写法如下:

打开浏览器,在浏览器地址栏中输入 http://localhost/guestbook,回车执行,若未提示错误,则表示ThinkPHP框架已经配置成功.在wwwLibAction下新建一个控制器,名为GbAction.class.php的文件,主要代码为:

在wwwLibAction下新建一个控制器,名为 GatewayAction.class.php 的文件,代码如下:

打开浏览器,在浏览器中输入网址http://localhost/guestbook/index.php/Gateway/,回车执行,若浏览器中返回的结果显示“Zend Amf Endpoint”或者提示下载 gateway文件的话,表明ZendAMF配置成功,并且与ThinkPHP整合成功.

在Flash Builder中新建一个Flex项目,在窗口中增加2个Button控件,1个DataGrid控件(id=dg),1个 TextInput控件,1个 TextArea控件.由于篇幅关系,本文只列出“查看全部留言”按钮的实现代码,主要代码如下:

运行结果如图2所示,当点击按钮时,触发请求,通过 ZendAMF的网关,我们成功地用ThinkPHP强大的数据模型功能获得服务器数据,最终返回给Flex显示.

图2 运行界面

4 对比分析

在进行对比分析之前,首先给出传统方法和本文方法的技术简明表,如表1所示.

表1 两种开发方案的技术简明表

针对留言板功能模块,分别使用上述2种方法进行了开发,运行在相同的服务器及客户端环境下,下面将从开发效率、请求响应时间两方面进行对比分析.

4.1 开发效率对比

从表2可以看出,模块代码行与模块开发时间的对比上,本文的方法都明显优于传统的方法.注:代码行的区别主要体现在服务端PHP的代码量.

表2 开发效率对比表

4.2 请求响应时间对比

从表3可以看出,在小数据量方面,两种方法的请求响应时间基本一样,无明显差别.但对于请求大数据的时候,本文方法的请求响应时间明显优于传统的方法.注:请求响应时间包括加载、初始化、执行和模板的响应时间.

表3 请求响应时间对比表

5 结语

综上所述,使用ThinkPHP强大的数据操作和模型的功能,通过ZendAMF的通信,可为Flex提供远程数据调用服务,而Flex强大的富客户端技术又弥补了ThinkPHP中视图(View)的不足.本文的方法综合了3者的优势,为敏捷式企业级应用开发提供了一个较好的技术解决方案.

[1]吴波.Flex异步通信方式的比较[J].广播与电视技术,2012(2):133-138.

[2]徐英钟,陈文竹,张凌霄.基于Flex与PHP的MVC框架整合应用研究[J].计算机光盘软件与应用,2010(4):108-109.

[3]Thinkphp团队.ThinkPHP简介[Z/OL].(2010-03-09)[2012 -05 -07].http://www.thinkphp.cn/about.html,2008.

[4]易学武.Net平台下的AMF开发[J].电脑知识与技术,2010,6(23):6615 -6617,6520.

[5]陈显军,魏祖宽.基于Flex的XML数据通信与应用研究[J].计算机与现代化,2008(3):112-114.

猜你喜欢

服务端控件视图
关于.net控件数组的探讨
新时期《移动Web服务端开发》课程教学改革的研究
5.3 视图与投影
在Windows Server 2008上创建应用
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
ASP.NET服务器端验证控件的使用
基于嵌入式MINIGUI控件子类化技术的深入研究与应用
摸清黑客套路防范木马侵入