基于MVC设计模式的虚拟实验平台模块化设计*
2013-09-05张原,张昭,刘蕊
张 原,张 昭,刘 蕊
(1.海军航空兵学院,辽宁 葫芦岛125001;2.海军航空工程学院,山东 烟台264001)
1 引言
虚拟实验系统是指采用网络、远程控制、虚拟现实、计算机仿真、多媒体等技术实现的各种虚拟实验环境,它涵盖了两个层面:一是基于Web对真实仪器设备的远程控制和遥控操作;二是以 Web为基础的面向教学的纯粹由软件实现的虚拟实验环境[1]。
目前我国信息化教学多以文字加图片的教学方式为主,注重理论教学,缺乏实验内容。对一些过程复杂、空间感强的内容尚不能充分描述清楚。另一方面,院校现有实验教学中普遍存在人均实验设备拥有量少、设备更新周期长以及学习时间冲突等问题。利用虚拟现实以及多媒体技术构建一个具有动态交互能力的虚拟实验系统,利用网络和多媒体技术充实实验内容,增开综合性实验项目是必要且紧迫的[1~4]。
许多学者在虚拟现实方面做出相应的工作,如利用Java、VRML、Labview等构建虚拟实验平台。但是,很多方法的构建效率较低,稳定性较差,且平台通用性不好,Java运行过程中客户端还需下载插件。Flash技术由于其采用了矢量图形技术,所生成的动画体积很小,跨平台性好且图形可以任意缩放,这正符合了气动实验高度动态表现力的要求。随着ActionScript 3.0(AS 3.0)的出现,近年来国内在Flash虚拟实验平台开发方面有了较大发展,但开发的过程往往为了项目实现而未能充分考虑到系统的拓展性和代码重用性。虚拟实验平台是未来实验建设的方向,如果每次都重头开发,则原来的代码浪费了,非常可惜,而且开发的效率也很低。
为了解决以上问题,本文采用MVC设计模式开发了空气动力学虚拟实验室系统,而具有优秀的Web应用特性和良好的跨平台特性的丰富互联网应用RIA(Rich Internet Application)技术成为更合适的虚拟实验系统的实现方案。
2 RIA技术与ActionScript 3.0
2006年起,RIA以其良好的用户体验、快速的响应速度、出色的兼容性以及卓越的Web应用特性和优秀的跨平台特性迅速赢得了大家的青睐,将RIA技术整合到虚拟实验室系统的建设中去,是解决当前虚拟实验室存在的问题的一个有效方法。
ActionScript 3.0(AS 3.0)是目前最流行的RIA开发语言,它们可运行在浏览器的Flash Player中,或将Adobe AIR作为一个桌面应用程序运行在移动设备上。与 AS 1.0和 AS 2.0不同,AS 3.0与ECMAScript标准兼容,引入了一些其他领域新的或更强的功能,它对面向对象编程OOP语言完全支持,深层优化了OOP架构,彻底更新了显式对象系统架构,全面支持正则表达式并采用了先进的E4X,新增强大的异常处理机制。AS 3.0强大的新特性使其对于大型应用程序开发更有吸引力。同时,新一代ActionScript引擎AVM2(ActionScript Virtual Machine2)较 AS 2.0时代的AVM1性能大幅增加,ActionScript 3.0代码执行速度最多可以比原有ActionScript代码快10倍[5]。
AS 3.0和AVM2带来的变革使得RIA极具潜力与活力。结合Java组件技术和数据库技术,RIA可以实现与MATLAB、C++、C#等语言的协同开发[6],如今利用 AS 3.0在3D 领域进行虚拟现实也已经实现,随着AS语言的完善和AVM的发展,其性能也必将更加强大。同时,AVM2和Flex在开源的方向上大步迈进,这意味着AS与RIA将有超强的生命力和号召力。
3 MVC设计模式
设计模式是指一系列从实践中总结出来的、可重复使用的面向对象的设计方法。MVC设计模式是许多交互和界面系统的构成基础,实现模型与数据、界面设计、控制功能的分离,使得各部分修改时相对独立,代码的可维护性增强;同时,也提高了应用程序的重用性,便于扩展,开发速度也有了显著提高。
大型软件开发的可持续性与易维护性取决于软件设计阶段对设计模式的选择。虚拟实验系统作为推广性、扩展性强的开放式互动系统,一方面,随着实验要求的提高和实验种类的增加,极有可能需要拓展新的实验模块;另一方面,作为互动平台的虚拟实验室在设计过程中难免出现对使用者操作考虑不周的情况,故系统出现BUG、功能异常及存在人性化设计缺陷的情况不可避免。如果在设计阶段没有一个合理的设计模式做基础,将会导致所开发的系统完成后不仅难于扩展新功能,更不利于代码的维护和更新。
教学用虚拟实验室系统可以分为三个部分:模型及后台数据、用户界面和用户操作。MVC模式正是使应用程序按上述三个部分划分所需要的对象:M为模型(Model),也包括后台数据,一个模型能为多个视图提供业务数据。同一个模型可以被多个视图重用。V为视图(View),指用户界面,可以向模型查询业务数据,但不能直接改变模型中的业务数据。视图还能接收模型发出的业务数据更新事件,从而对用户界面进行同步更新。C代表控制器(Controller),即用户操作,接收用户的输入并调用模型和视图去完成用户的请求。MVC模式的简单结构如图1所示。
Figure 1 MVC structure diagram图1 MVC结构示意图
首先,操作者根据视图提供的界面对其进行操作,控制器接收到视图转发过来的用户的输入信息,并通知相应的模型做出处理;然后,模型用相应的方法来处理这些信息并返回数据;最后,通过控制器通知与这些数据相关的视图更新[7]。显然,对于具有这种体系结构的可视化组件,可以利用这样的内部机制,通过模型对数据的存储及维护功能,控制输入和输出。使用MVC需要花费一定的时间和精力去进行精心的设计,但采用它将会使软件在健壮性、代码重用和结构方面上一个新台阶。尽管在最初构建MVC框架时会花费一定的工作量,但从长远角度看,它会大大提高后期软件开发的效率。
4 空气动力学虚拟实验平台的构建
下面以开发全机气动力系数测量实验(界面见图2)为例,说明设计方案的形成过程。
Figure 2 Aerodynamic coefficients of the whole aircraft measurement interface图2 全机气动力系数测量实验界面
4.1 设计方案
分析实验的运行流程,判断其所有可能的操作及相应事件。全机气动力系数测量实验基本流程如图3所示。
4.2 确定MVC设计模式中的模型、视图及控制器
根据如图3所示的流程图可以看出,居中一列在虚拟实验平台中负责对数据和各控件参数进行初始化,响应用户操作并根据实验原理调用内部算法对参数进行更新,最后将结果传递出去,这一部分承担了模型(Model)的主要职责;右侧一列主要负责界面各个控件的显示,根据模型返回的数据实时调整机体的姿态位置、显示测量结果,即可将该部分看做视图(View);而靠左一列控制着实验的流程,传递着用户的指令,实现了界面和算法的交互,即扮演着控制器(Controller)的角色。通过上面的划分,对虚拟实验平台进行总体设计,将整个开发项目分作界面层、控制层、数据层三层,并对开发小组进行分工,同步对三层进行开发,界面定制完毕后通过类绑定与控制层、数据层进行交互和通信,三者相互协调,完成实验所需的功能。
Figure 3 Aircraft aerodynamic coefficients measurement basic flowchart图3 全机气动力系数测量实验基本流程图
5 模块化控件开发
在虚拟实验平台具体的开发实现中,选择Flash作为主体工具,本节将重点关注如何利用Flash进行可重用控件的开发,再将这些控件进行有机组合,并结合实验原理通过模块内部的算法来复现实验现象。
虚拟教学实验平台中的不同实验科目之间有很多相通之处,为降低开发难度,缩短开发周期,在系统设计时采用了模块化理念,其主要思想是把实验中相通的部分看作一个模块,将它们做成一个或一组影片剪辑(MovieClip)。例如,可将风洞开关或实验说明作为一个模块,设计实验场景时只需将它拖入舞台,根据需要稍加修改即可。
要实现模块化,类绑定技术将大量运用。以往的Flash开发多将代码写在帧上,虽然帧代码直接、简单,但代码分散在不同层、不同影片剪辑的不同帧中,因此代码不易于维护且几乎没有重用性。要想使一个控件具有较好的可移植性,或者希望一类控件都具有良好的可移植性,就需要使用类绑定降低代码和影片的耦合度。
以全机气动力系数测量实验中的风洞开关按钮为例,这个按钮上有静态文字,以便需要更换按钮的说明文字时不必对按钮的每一帧都修改,另外当鼠标在按钮或文本上时,鼠标均会变成手指的形状,该按钮的功能是点击开启风洞,同时初始化各项参数开始实验。为了实现这些效果和功能,首先将按钮外观设计好,再设置一个静态文本“开启风洞”转化为影片剪辑并命名为label_txt,将两者放在同一个影片剪辑中,将BasicButton.as绑定到该影片剪辑上,BasicButton.as代码如下:
package{
import flash.display.*;
import flash.events.*;
import flash.text.*;
public class BasicButton extends MovieClip{
private var_lable:String;
private var allButtons:Array;
public function BasicButton(){
buttonMode=true;
label_txt.mouseEnabled=false;
this.addEventListener(MouseEvent.CLICK,clickButton);
function clickButton(evt:MouseEvent):void{
Global.windstatus=true;
var wag:windArrowGroup= new windArrowGroup();
wag.x=230;
wag.y=15;
stage.addChild(wag);
}
}
}
}
代码中windArrowGroup为影片剪辑(MovieClip),它包含一组表示风向的箭头,并令其为ActionScript导出,从而自动生成默认的类来进行绑定。这样我们需要批量创建类似的按钮时,只需要改变静态文本和BasicButton.as中的功能代码即可。比如要实现关闭风洞的按钮功能时,只需在库中复制开启风洞的 MovieClip,并将新MovieClip的静态文本改成“关闭风洞”,同时将BasicButton.as中addChild换成removeChild,另存为BasicButton2.as并将其绑定在关闭风洞的MovieClip上即可。这样进行控件开发省时省力,更重要的是结构清晰,易于维护和查错。
利用MVC设计模式和模块化思想,能使开发周期大大缩短,随着开发的进行,加入一个新的实验功能往往只需一到两天便可实现。
6 容错系统与代码维护
6.1 容错系统与误操作提示功能
实验操作者对界面功能不熟悉,在实验中难免出现流程错误或参数输入错误,因此在本系统中设置了实验容错系统和误操作提示功能。例如,在雷诺实验中测定下临界雷诺数时,若未将无级调速器开至最大位置就点击开始实验,系统将提示学员首先操作可控无级调速器。
在翼型表面压力分布测量实验时,如果调节风洞风速过大,则会提示到达风洞风速上限。这种人性化的提示使实验过程更加完整,方便学员熟悉实验流程,具有更强的沉浸感,使虚拟实验逐渐回归现实[8]。
6.2 异常处理机制
使用异常处理机制的最主要原因是让程序更加健壮、更加易于维护。有时,根本不能通过修改代码来处理异常,原因是有的异常可能来自于第三方组件或者源码的缺陷。如果是第三方编译好的组件,则不能访问其代码。如果是源码,可能由于其结构庞大,缺少详细文档,查错困难,不如在自己的代码中集中处理这些异常。因此,在本系统的代码设计中,碰到异常就尽可能就地解决。如果在当前代码中无法处理,那么再继续抛出,并写好注释,方便日后修改和调试。
异常发生后,系统将在代码及使用的第三方工具中,记录下异常的发生原因、次数和发生场景,生成的错误日志对日后的调试和维护非常重要。同时,注重编程规范,杜绝使用空代码处理异常的现象[5,9]。
7 结束语
本文在对空气动力学的理论研究和实验研究的基础上,采用MVC设计模式站在全局规划的高度,利用模块化思想构建了界面友好实时交互的网络化空气动力学虚拟实验室。该系统的设计思路更加清晰,可操作性强,便于多人分工协作,注重代码的重用性和健壮性,方便了系统功能的拓展和维护,并为接下来进行的虚拟现实项目打下了基础。
通过学生对该虚拟实验平台的使用,对比仿真实验的模拟结果与真实实验结果可以看到,虚拟实验平台能够获得较准确合理的结果。而在Linux服务器上,该平台亦能稳定运行。本文设计的空气动力学虚拟实验平台更加人性化,操作简便,功能较全面,跨平台、跨操作系统的能力强,可适用多种网络交互客户端。同时,系统虚拟的实验过程完整,更具沉浸性,使虚拟实验逐渐回归现实,并可以利用Flash的网络优势轻松实现在线互动。使用者通过模拟过程,可达到熟悉实验仪器和装置、掌握实验操作过程的目的,能够满足仪器操作培训、实验教学的网络学习等方面的需要。
凭借其独有的技术和经济优势,虚拟仪器和虚拟实验室将成为今后实验室建设的研究重点并具有广阔的发展前景。在下一步的工作中,将进一步深入研究加入语音的实时交互与更多线上交互功能,未来的方向主要是实现虚拟与现实仪器协同化、同步化,真正建立起立体化全时空的网络三维仿真虚拟实验室。
[1] Li Xin.Virtual reality and its educational applications[M].Beijing:Science Press,2008.(in Chinese)
[2] Chen Juan,Wang Xiao-ping,Lu Jian-feng.Development of virtual aerodynamic experimental platform based on flash technology[J].Mechatronics,2010,16(1):43-45.(in Chinese)
[3] Zhang Gang,Luo Xiao-hua,He Li-fang.Research on technologies to support web virtual lab[J].Research and Exploration in Laboratory,2008,27(3):55-58.(in Chinese)
[4] Ma Zheng,Zhou Yan,Xie Shi-bo.Research and applications of MVC design pattern in NMS[J].Journal of University of Electronic Science and Technology of China,2005,34(5):51-56.(in Chinese)
[5] Sun Ying.Flash ActionScript 3:Halls of the road[M].Beijing:Electronic Industry Press,2009.(in Chinese)
[6] Peng Gui-fu,Gu Ji-ye,Xu Qing.Design of the virtual experiment system based on RIA technology[J].Computer CD Software and Applications,2010(8):172-176.(in Chinese)
[7] Liu Zhi-guang,Wang Hai-yong,Li Jian,et al.The construction of workstations for networked physical chemistry virtual laboratory based on MVC design pattern and Flash component technology[J].Computers and Applied Chemistry,2007,24(8):1110-1114.(in Chinese)
[8] Liu Zhi-guang,Hu Zhao-qin,Wang Hai-yong,et al.The research and construction of emulational virtual chemistry lab(E-VCL)for the electric potential analysis based on Flash[J].Computers and Applied Chemistry,2006,23 (10):1023-1030.(in Chinese)
[9] Sutter H,Alexandrescu A.C++coding standards 101rules,guidelines,and best practices[M].Hongkong:Pearson Education Asia Ltd,2006.
附中文参考文献:
[1] 李欣.虚拟现实及其教育应用[M].北京:科学出版社,2008.
[2] 陈娟,王晓平,陆剑峰.基于Flash技术的虚拟气动实验平台的开发[J].机电一体化,2010,16(1):43-45.
[3] 张刚,罗小华,贺利芳.构建网络虚拟实验室技术研究[J].实验室研究与探索,2008,27(3),55-58.
[4] 马争,周艳,谢世波.MVC设计模式在网管系统中的应用与研究[J].电子科技大学学报,2005,34(5):51-56.
[5] 孙颖.Flash ActionScript 3殿堂之路[M].北京:电子工业出版社,2009.
[6] 彭桂馥,顾继业,徐青.基于RIA技术的虚拟实验室系统设计[J].计算机光盘软件与应用,2010(8):172-176.
[7] 刘志广,王海勇,李健,等.基于MVC设计模式和Flash组件技术构建物理化学网络虚拟实验室工作站的报告[J].计算机与应用化学,2007,24(8):1110-1114.
[8] 刘志广,胡照琴,王海勇,等.基于Flash技术的电位分析仿真虚拟实验室的构建方法研究[J].计算机与应用化学,2006,23(10):1023-1030.