时间:2023-05-30 09:46:48
开篇:写作不仅是一种记录,更是一种创造,它让我们能够捕捉那些稍纵即逝的灵感,将它们永久地定格在纸上。下面是小编精心整理的12篇mvc框架,希望这些内容能成为您创作过程中的良师益友,陪伴您不断探索和进步。
关键词:Web前端;mvc;意义
前言:Web前端开发是Web技术发展中的一个重要组成部分,在传统的前端开发中由于外界因素的影响导致其开发形式呈现出简单化的特点,即以页面为主体来展示界面中的信息。然而随着科学技术的不断进步,Web前端开发形式上变得更为复杂,但是其功能方面也逐渐实现了与用户间的相互交流。以下就是对Web前端MVC框架意义的详细阐述,望其能为现代背景下Web前端开发技术的可持续发展提供有利的文字参考。
一、传统MVC模式基本概念分析
在传统MVC模式中其应用被划分为模型层、视图层、控制层三个层次,而经过大量实践调查表明,不同层次在系统实际运行中承担着不同的职责。模型层在系统运行中的任务即为数据处理。且数据模型层也可通过数据访问的方式来获取自身所需信息,并优化数据整合,将其应用于业务包装中,为用户提供更为高质的服务体系。视图层在系统运行中的主要任务即为显示数学模型中处理的信息等。但是,由于视图层数据显示存在着针对性特点,因而在利用其进行数据显示时应前面掌握其特性。另外,视图层中功能的发挥需要基于数据模型来完成,因此在一定程度上限制了其应用领域。控制层在系统中的主要职能即为对系统中应用程序的合理控制,并在视图数据显示中出现问题时,对其问题的发生进行合理控制,且在事件控制后作出相应响应提醒相关技术人员。另外,在控制层事件处理中模型层也承担着协助的作用,即在控制层作出相应后,模型层要及时整合数据、信息,并合理更新视图层中所显示的数据[1]。
二、前端MVC框架
就目前的现状来看,前端MVC应用最为广泛的即Backbone.js,Ember.js、Angular.js等几种。这几种前端框架都是基于MVC完成的,但是经过大量的实验表明,每种框架处理问题的方式都存在着一定差异。Backbone.js与其它框架相比其优势在于可更好的解决系统应用中层次问题,进而为用户提供更为可靠的操作平台。其次,Backbone.js框架应用层中的视图层在模型数据修改后可及时对自身页面显示的数据进行修改,确保视图层与数据模型层数据的一致性。此外,Backbone.js框架还支持定位功能,即对其的应用可确保在系统实际运行中出现需处理的事件时,可及时通过定位的形式找到事件的源头,并对其进行有效解决。Ember.js框架其广泛应用于桌面开发中,且由于其界面设计存在着标准化的优势,因而得到了更多用户的亲睐。另外,其可协助MVC系统的运行,帮助其处理应用层中相应事件问题。此外,Ember.js还为用户提供了模板使用说明,促使其在对界面进行实际操作过程中可有效掌握魔板操作方法,避免不规范操作行为的发生。Angular.js源自于Google设计,其在一定程度上拓宽了应用层中的词汇使用范围,同时也在系统界面中增添了部分动态内容,便于用户界面操作行为的展开。
三、Web前端MVC框架的意义分析
(一)jQuery等库与前端MVC间的区别
jQuery等库与前端MVC间的区别主要表现在以下几个方面:第一,二者解决的问题存在着一定的差异,即jQuery主要应用于对代码、封装等问题的解决。而其也为系统实际运行提供了多种封装方法,由此稳固了代码结构的合理性设置,而前端MVC框架与jQuery等库在问题解决方面有所不同,其更加倾向于对程序组织方面问题的解决,进而推动系统中的程序运行逐渐趋于规范化。另外,前端框架为系统运行提供了一套规范化的问题解决方案,致使系统运行中出现相应问题时可及时参照方案对问题展开及时、有效的解决,且最终提高系统运行的稳定性;第二,jQuery的操作中心为DOM,而MVC框架的中心却为模型。因而MVC与jQuery相比其流程的变更更为及时,且也为现代工程师的代码编写提供了有利条件。另外,MVC框架解决了传统HTML源码处理中的问题,促使相关工作人员在实际工作开展过程中即可通过参照前端MVC框架中的规范化流程打通后端处理,提高系统中的整体运行效率[2]。
(二)Web前端MVC框架适用范围
近年来,Web前端MVC框架的开发意义逐渐引起了人们的关注,而从Web前端MVC框架的适用范围研究中即可看出其在系统运行中占着至关重要的位置。对于此,可以从以下几个方面入手分析:第一,从大量的实践中可以看出,Web前端MVC框架不适用于页面型产品中,造成此现象的原因主要归咎于此类产品主要依附于服务器来运作自身系统,因而在此背景下,jQuery等库会更好的满足其互动性需求,且最终导致Web前端MVC框架在页面型产品中无法发挥其自身效用;第二,在软件型产品,对于Web前端MVC框架的应用是非常必要的。首先由于软件型产品对数据操作能力的要求较大,因而若将Web前端MVC框架应用于软件型产品实际运行中,那么框架中的数据模型层会在一定程度上满足其数据操作需求,且会在系统实际运行中出现问题时,对数据展开及时的更新处理。其次,软件型产品中会涉及到大量的视图操作,但是由于jQuery等库无法完成高效率的操作行为,因而将Web前端MVC框架应用于其中,会在一定程度上更好的满足程序开发需求[3]。
结论:综上可知,Web前端MVC框架在程序开发中的应用有着一定的限制性特点,因而在Web前端MVC框架不断创新的背景下,相关开发人员在实际工作开展过程中应结合Web前端MVC框架的特性将其应用于程序开发中,提高系统运行的整体运行效率,同时促使开发产品具备自身独有特色。另外,为了确保Web前端MVC框架设计的可持续发展,要求相关技术人员应致力于架构与代码的研究,为其开发提供便利。
参考文献
关键词:MVC设计模式;B/S架构;Struts 2.0; Xml文档解析;J2EE
中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)10-2308-02
Key Technology Research of Web Framework Based on MVC Pattern
LI Jun-jun, FU Hong, ZHANG Li, JIANG Zu-xin
(College of Information Science and Engineering, Henan University of Technology, Zhengzhou 450001, China)
Abstract: There is a growing emphasis on B / S network applications, MVC Pattern is widely used in Web application development. People design many Web Frameworks which are based on MVC Pattern in order to save software development time. By studying the achievement of MVC mechanism in Struts 2.0, summarizes a series of key technologies needed when design Web Framework based on MVC Pattern.
Key words: MVC design pattern; B/S architecture; Struts 2.0; Xml document parsing; J2EE
模型-视图-控制器(MVC,Model-View-Controller)最早是smalltalk语言研究团提出的,应用于用户交互应用程序中。随着基于B/S架构的网络应用的高速发展,MVC设计模式在Web开发中找到了用武之地,MVC开发模式可以实现分离数据和数据表现,让开发人员开发一个可伸缩性强,便于扩展的控制器,来维护整个流程。
面向对象技术的出现和应用大大提高了软件的重用性和软件的质量。Java语言作为一种面向对象语言,为Web开发提供了强有力的支持,Sun公司提出的J2EE可简化且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值。Struts 2.0框架就是基于J2EE和MVC设计模式开发的一个优秀Web开发框架。
1 MVC模式的设计思想
MVC的设计思想就是:开发人员将一个系统的输入,输出,流程处理编程方式转换为模型层,视图层,控制层三层编程方式,从而使整个系统责任明确,接口清晰,加快设计开发过程。一般Web框架如图1所示。
2 Web框架设计流程
Web框架设计流程图如图2所示。
本文采用目前广为应用的J2EE技术作为开发框架的主要技术。开发的基本思路是:
View采用Jsp和JavaScript技术,Controller层采用Servlet和Xml技术,Model层采用Java和JavaBean技术。
3 WEB各层设计关键点
每一个框架都是考虑了最通用的情况,并不一定适用于所有的项目。这要求开发人员对框架有深刻的理解,优秀的开发人员需要跳出具体的框架,站在更高的层次上把握框架,从设计理念出发去具体对待框架,在当前框架不能满足项目需求的时候,能够修改框架以便适合自己的项目需求。本文通过一个Web框架的设计来具体分析相关技术。其结构如图3所示。
3.1视图层设计
在视图层采用JSP技术,因为JSP可以使用JavaScript,JavaBean和自定义标签等,这些技术组合在一起,可以获得灵活的数据组合方式。
1) 为了方便管理,可以在所有的JSP页面的顶部添加一个页面名称。
2) 为防止代码混乱,可以在框架所有的JSP页面中统一设置一种编码方式,即可以在JSP页面的顶部添加如下代码:
3) 通过在 Web.xml中定义Servlet的请求方式,可以将所有JSP页面的请求都转入Servlet进行处理,这样很容易通过request,response实现JSP和Servlet之间的数据转化。为防止要获取的数据量比较大带来的负面影响,可以在Servlet中将所有传递到JSP页面中的数据存储在一个Map中,这样页面只需从request中取出Map,剩下的数据就可以从Map中获取,加快页面的处理速度。
4) 为了统一整个应用的风格,对于窗口的打开方法,可以在系统中将其抽取出来,定义一个公用方法。一般而言,会对要打开的URL,窗口名称,窗口宽度和高度进行设定,而其他属性保持不变。如下面方法定义:
functionopenWindow(name, url, width, height){
var screenWidth = screen.width;
var screenHeight = screen.height;
var w;
w = window.open(url, name , "width="+width+",height="+height+",
menubar= no,resizable=yes,toobar=no,directories=no, location=no,
scrollbars=yes,status=yes,copyhistory=0");
w.moveTo((screenWidth-width)/2,( screenHeight-height)/2);
w.focus();
}
代码说明:
传入的参数分别表示:窗口名称,要打开的URL,窗口宽度和高度。
w.moveTo()的意思是:打开的窗口显示在屏幕中心。
w.focus()函数的意思是:使焦点在打开的窗口上。
3.2 控制层设计
控制层主要用来转发从视图层传来的数据和请求到相应的模型层,因此实现它的最好方法是使用Servlet。
一般在Servlet的低版本中,在Servlet中要同时实现解析配置文件,对页面传来的值进行转化,调用相应的函数,以及返回结果处理后的页面等。这样使得控制器设计显得很臃肿,也不利于代码的维护。随着java版本的不断提高,在Servlet 2.3规范中引入了Servlet过滤器,这种机制提供了在转入Servlet之前进行预处理的功能。
Servlet过滤器其实是面向方面编程思想的一种实现方式。在实际应用中也可以利用Java提供的动态技术来实现简单的AOP,并利用配置文件实现动态“插拔”。
在控制器的设计中,返回页面的映射方式,表单提交方式和多动作处理方式十分重要,这三方面良好的设计可以很好改善框架的功能。
返回页面的映射设计可以采用Xml技术方便的进行映射配置,只需在配置文件中指定一个forward元素,而且在映射关系改变的时候,只需修改配置文件就可以了。页面之间元素的传递也很重要,一般可以使用HashMap来实现,但是我们要把页面表单直接放入HashMap中会降低页面值获取与控制器之间的耦合性。可以通过将表单元素值封装成一个VO(值对象),将VO放入HashMap中,使用时从HashMap中取出,而VO与Action关系可以通过Xml文件惊醒配置。而多动作的处理方式也通过Xml文件来实现.
3.3 模型层设计
模型对象对应了商业规则和商业数据,即分为业务处理对象和业务实体对象。业务处理对象封装了具体的处理逻辑,调用业务逻辑模型,并且把响应提交到合适的视图组件以产生响应。业务实体对象可以通过定义属性描述客户端表单数据。所有业务实体对象都EntityBase派生子类对象,业务处理对象可以直接对它进行读写,而不再需要和request、response对象进行数据交互。通过业务实体对象实现了对视图和模型之间交互的支持。实现把"做什么"(业务处理)和"如何做"(业务实体)分离。这样可以实现业务逻辑的重用。MVC没有现成的设计方法来指导Model的设计。但是良好的Model层设计可以提高整个框架的可扩展性,也有利于模型的重构和可重用性。
我们可以设计一个接口,让所有的模型层对象都实现这个接口,以统一的方式进入模型层的处理,实现业务规则的调用,完成用户的请求。对于视图层传入的数据,可使用在控制层中转化的得到的VO;对于业务逻辑可以放在DAO中处理。
4 结束语
基于MVC模型的Web框架,只要合理设计三层之间的关系,可以有效提高系统的可重用性,可以有效提高系统设计效率,缩短开发周期。
随着新技术的不断发展,为基于MVC模式的Web框架设计提供了更强的技术支持,其功能将日益完善。
参考文献:
[1] Camma E.Design Patterns:Elements of Reusable Object-Oriented Software[M].Addison Wesley,1994:5-20.
[2] Husted T.Struts In Action[M].Manning Publication Co.,2003.
关键词 PHP框架 轻量级 模块化 插件化
1 MVC设计模式
MVC是一种软件设计模式,它强制性使应用程序的输入、处理和输出分开,分解成模型、视图、控制器3种部件,它们各自处理自己的任务,如图1所示。
视图(View)是用户看到并与之交互的界面。模型(Model)用来表示数据和业务规则,数据的处理、逻辑和功能的计算。控制器(Controller)用来接受用户的操作并调用模型和视图完成用户的需求。
图1:MVC工作流程图
使用MVC模式开发的优点主要有加快项目的开发效率、增强项目的可维护性、有利于软件工程化管理。
2PHP开发框架现状
所谓框架就是通过提供一个开发程序的基本架构,把程序开发摆到了流水线上。使用框架的优势在于能极大地促进快速软件开发,节约系统开发的时间,创建更为稳定的程序,并能减少开发者的重复编写代码的劳动。
目前流行的PHP开发框架有:Zend Framework、CakePHP、symfony、E框架、Codelgniter、ThinkPHP等。但使用框架也有一些不足,主要有:①增加系统的复杂性。②在提高大型项目开发效率的同时,降低了小型项目的开发效率,③数据处理流程复杂化,从而在一定程序上影响系统的性能。④为了使框架具有良好的兼容性的,提供大量的功能组件和特性,普遍为重量型框架体系。
框架的重量型与轻量型是相对的,两者解决问题的侧重点是不同的。轻量级框架侧重于减小开发的复杂度,相应的它的处理能力便有所减弱(如事务功能弱、不具备分布式处理能力),比较适用于开发中小型系统应用。重量级框架则强调高可伸缩性,适合与开发大型企业应用。
轻量级框架和重量级框架的区别是以启动程序需要的资源来决定。比如,EJB启动的时候,需要消耗大量的资源如内存,CPU等,所以是重量级。
鉴于此,本文提出一种基于MVC的轻量级PHP开发框架,同时强调模块化、插件化按需加载服务的框架体系,具备在降低开发复杂度的同时,增加系统的可伸缩性。
3轻量级WEB开发框架设计与实现
3.1框架底层结构
通过对Web常规应用的抽象,整个框架可由系统初始化基本函数库、系统核心类库,模型类库等公共基础类组成。核心主要负责底层的操作,由核心加载系统,加载模块。在这里所谓系统是指多个模块的集合体,系统内各模块由完成系统加载。各个系统的实现均以继承系统父类的方法来进行扩展,系统父类中已经实现了系统的功能,其余个性化的功能按系统的需求进行扩展实现。各个小功能模块的实现也均以继承模块父类的方法来扩展,功能也是要按模块需求扩展。最终形成核心+系统+模块+插件的体系架构。
图2:框架架构图
3.2框架的运行过程
用户请求URL时系统会根据URL路由进行路径的判定,如果适用于静态化规则的,则直接返回指定的静态化页面;如果不是静态URL的(伪静态或动态),则将请求转发给相应的控制器进行解析,解析处理后再由相应的控制器进行响应,处理器通过与模型、视图、缓存等进行交互后最终形成完整的数据输出给请求的用户。
3.3开发统一规范性要求
系统的二次开发,需要开发者遵照框架设定的规范进行,形成统一的标准,以方便后续代码的管理和维护。其中缓存文件根据不同的类型分别存在在不同的子目录和文件,主要的目录和文件如表1所示。
3.4加载器
加载器是一个自动包含所需的组件并将其进行初始化的一类函数,它们根据用户请求的URL判断需要加载的模块或插件,按需加载模块或插件所特有的功能组件,可加载类、模型、配置、语言包等。
3.5错误处理
框架定义了Debug调试模式和常规模式两种运行机制。Debug调试模式主要用于系统开发人员对系统进行调试开发,输出系统规定的报错信息,方便系统开发人员调试系统。常规模式则屏蔽系统错误,在用户请求出错或系统出错时,返回指定的页面并记录出错信息。系统开发完成后,系统关闭Debug高度模式进入常规运行模式。
3.6模型、模块
模型是对统核心代码的应用实例,通过对底层核心类的继承来扩展功能,形成模型(在这里也称为模块)特有的功能。支持常规的文章资讯、图片、下载、视频等模型应用,支持对模块进行复制、安装、暂停、删除,真正实现按需加载,示例如图3所示。
图3:系统中模型的管理
3.7控制器
控制器是所有逻辑的中心,负责将用户的URL以合理的方式响应。系统采用多文件入口机制,用户请求URL直接向具体的文件请求,提高了系统的运行效率和具备良好的SEO支持。典型的URL请求如:http://localhost/admin.php?moduleid=7&file=course。控制器可以向类库、模型、缓存等众多对象发送请求,并通过数据层和视图层访问,以实现清晰的分层分工机制。
3.8视图/模板
视图是使用控制器处理后的数据来渲染用户指定的模板,以最终展现给用户的界面。同一个视图可以被不同的模型调用。视图收到渲染请求后,为了提高渲染的效率,会优先查找要渲染对象的缓存文件,如果缓存文件中存在,则将其加载到内存,然后输出数据;如果缓存中不存在,同加载模板编译器对模板进行编译,并存放在指定的位置,最后再加载并输出数据。
3.9缓存机制
框架当中大量使用缓存机制,系统运行时,直接读取缓存文件,这极大地提高系统的执行效率。可供缓存的信息包括系统配置信息、模块配置信息、插件配置信息、视图模板以及需要频繁从数据库读取信息的数据,时时系统也支持memcached缓存机制。当系统要读取的缓存文件不存在时,将加载文件缓存生成器,生成相应的缓存文件,并存放在指定的位置,如图4所示。
图4:部分重要的缓存目录和文件
4总结
每个PHP框架都有自己的特色,如CodeIgniter是一个为建立PHP网站的人们所设计的工具包。其目标在于快速的开发项目,提供了丰富的库组以完成常见的任务。本文提出的框架有利于团队合作开发,提供便利的模板机制,高效的缓存文件和多样的URL规则,统一规范的文件目录结构,以模块化、插件化使系统功能和规模具备极高可伸缩性。
参考文献:
[1]郭欣.构建高性能Web站点[M].北京:电子工业出版社,2009.
[2]刘立芳.基于MVC模式与插件式设计的开发架构的探讨与实践[J].电脑编程技巧与维护.2011(14).
[3]刘宇祥 PHP流行框架的研究[J] 青春岁月.2012(8).
[4]赵增敏.PHP动态网页开发[M].北京:电子工业出版社,2009.
作者简介:
关键词: 计算机软件; MVC构架; Jakarta Struts框架; 软件测试
中图分类号: TN911?34; TP311.5 文献标识码: A 文章编号: 1004?373X(2017)06?0071?04
Abstract: Although the separation design thought of MVC model has improved the overall quality of the software, but because the model only defines the configuration of static architectural components, MVC model con not clearly provide the behavioral expression of Web application program development process, which leads to the obvious differences between the description of Web application program and its behavioral characteristics. To fill this difference, a behavior model is proposed in this paper, in which the automatical receiving mechanism of the URL request sequence of the program is modeled, and a testing framework based on behavior pattern is proposed for Web application program. The research result shows that, when it is focused on the cyclic behavior of an automatic mechanism, this framework can provide a better test standard for Web application program. The result that the framework is applied to the configuration scheme of Jakarta Struts framework shows that the behavior model has achieved a very good effect in the classification of the testing paths of the Web application.
Keywords: computer software; MVC architecture; Jakarta Struts framework; software testing
0 引 言
Web应用是计算机响应系统外的网络请求所需的一种软件技术,其基本特征是根据不同交互系统和环境所表现出的特殊行为机制。在传统基于功能模块的软件中,输入输出关系极为重要,这种特征影响着软件架构的各个方面[1?3]。网页应用普遍建立在基于MVC架构上的J2EE平台上,其为Sun 微系统公司制定的一系列建网页应用的基础API接口集合。MVC模型给出了在API之上来结合组件以开发网页应用的架构模型,其旨在采用合适的方式对组件进行分离式设计,增加Web应用的可维护性和可重用性。然而,由于MVC模型仅提供抽象的形式,导致了行为描述在描述组件静态架构关系时被分离,在实际开发调试及测试的过程中两者差异较大[4?6]。因此,本文给出一种简单的行为模型,并定义一种直接行为描述方式。本文的基本想法是将Web应用程序的行为类比为一个自动机,其状态为JSP,且状态转换被URL请求所调用。假设应用程序有一个进入页面,如欢迎页面,同时有一些最终页面,如感谢页或错误页。在网页应用中,返回到之前访问过的页面常会要求相似的转换。因此,本文考虑将重访页面作为改进测试。基于这种思想,本文给出一种网页程序的测试标准,并通过一个简单的图书管理系统来论证该方法的有效性。
1 网页应用的MVC模型
MVC模型由三种组件构成:模块、视图和控制器。其中,模块组件代表数据域,视图组件处理客户端的输出,控制器组件定义对数据的操作。MVC模型通常在J2EE平台上使用JSP/Servlet技术[7],其模型基本结构如图1所示。首先浏览器递交一个需求给控制器,控制器根据需求处理模块组件中的数据,并将处理后的数据更新至后台数据库,然后控制器将会调用一个JSP对请求做出响应。
文中MVC模型使用JSP/Servlet技术,其中模块组件采用JavaBean来实现,视图组件采用Java Server 页面,控制器组件则采用ActionServlet实现。J2EE根据指定组件之间连接的配置信息来组装组件。
Struts是由Jakarta项目开发的一个开源网页应用框架,Struts采用遵从如上所述的MVC模型的JSP/Servlet技术,其具体类结构如图2所示。基于MVC模型的行为在其中的实现如下:ActionServlet是一个总的工厂类,负责处理外部请求及分配适当的ActionServlet。开发人员通过定义操作类的子类来实现具体的控制行为。操作类是通过ActionServlet类激发的抽象。一个Servlet操作指的是一种活动形式目标以及做一些处理操作,其结果被包括到操作转发目标中以返回给Servlet操作[8?9]。Servlet操作将会根据描述ActionForward到JSP的映射关系ActionMapping来调用一个JSP。最后,所调用的JSP作为响应呈现。与此同时,JSP可能会根据其动态内容做出一些相应处理。
2 行为模型
基于MVC模型的Web应用程序的原始外部行为是成对的请求序列和JSP,本文将网页应用的行为模式化为一种自动机。鉴于Struts框架,文中用有限状态来完成自动机模式化,其中的状态是一系列出现在配置中的JSP[10?11]。自动机的字母表来自ActionServlet的请求和响应,这些请求和响应在其中被描述为配置文件。本文假设有一个最初的JSP作为预期行为的切入点,同时假设最终的JSP作为网页应用事务和会话的预期终结点。
定义1 给定一个在Struts中描述的网页应用A,一个有限自动机WebA=(View,Act,AM,iv,FV),调用Web自动机定义如下:View是在A中的JSP文件;Act是A的一系列请求及Servlet响应对集合;[AM?View×Act×View]是A的操作映射;[iv∈View]是A中的初始JSP页面;[FV?View]是A中的最终JSP页面集合。存在[a∈Act],本文定义rq/re,其中rq是一个对ActionServlet的请求标签,re是对ActionServlet的响应标签,当ActionServlet被激活时,re被忽略。Action映射指被激活的指向指定的ActionServlet的指令集合,而JSP则根据ActionServlet被调用。
本文的建模目的旨在测试网页应用,即使在最终的JSP中,仍需存在一些链接以开始其另一个请求;但对于测试应用的动态行为,这些链接并不重要,因通常这些链接并不包含应用的逻辑组件,这些请求均惟一地被应用映射到含有适当前缀的URL上。为了简单起见,本文忽视这些参数。
图3所示为一个行为模型的示例――简单的图书馆管理系统,其负责管理图书数据库。该图书馆管理系统由三个功能组成,其一是检索系统中已注册的书籍,该功能由JSP,QueryAct构成搜索,由JSP构成列表,并使用未认证的JSP呈现细节。另外两个功能是注册新书以及修改注册记录,这两个功能由JSP执行修改,由ModifyAct及RegistAct执行注册,由JSP显示成功和失败的结果,通过CertifyAct进行认证以及通过JSP来进行登录实现。
图3中Weblib的行为模型组成如下:
View = {search, list, detail, login, modify, regist, failure, success}
Act= {QueryAct/list,QueryAct/detail, CertifyAct/mod, CertifyAct/reg, CertifyAct/NG, ModifyAct/success, Modify/failure, RegistAct/success, RegistAct/failure, link search, link detail}
iv = search
FV = {list, detail, failure, success}
AM = {(search, QueryAct/list, list), (search,QueryAct/detail, detail), (search, CertifyAct/NG, login), (search, CertifyAct/mod, modify), (search, CertifyAct/reg, regist), (login, CertifyAct/NG, login), (login, CertifyAct/mod, modify), (login,CertifyAct/reg,regist), (detail, CertifyAct/mod, modify),(detail,CertifyAct/reg,regist), (detail, CertifyAct/NG, login), (modify, ModifyAct/success, success),(modify, ModifyAct/failure, failure), (list, link detail, detail), (regist, RegistAct/success, success), (list, link search, search),(regist, RegistAct/failure, failure), (detail, link search, search),(success, link search, search), (failure, link search, search)}
3 测试框架
给定一个网页应用A,WebA将遵从操作映射模拟全部的行为特性。每个字均会被WebA介绍以模仿预期A的事务或会话。语言同样也被WebA接收,即L(WebA)。因此,检测L(WebA)中的所有字是一种对A有效的测试方式。然而,因L(WebA)是一个常规集合,通常其是无穷的,从测试的角度来看,本文主要关注网页应用的特性,WebA中的循环是一个返回之前访问过的页面的序列,这些重复访问的页面通常会导致应用中的逻辑组件进行相似的应用。据此,在L(WebA)中最令人感兴趣的测试是其中最多一次循环的字,为了包含所有转换,必须将单循环考虑在内。通过增加JSP的访问,可以测试Web应用程序更多的属性。本文将这种思想形式化以形成一种测试标准。
Weblib有两种循环:由首尾页间链接触发的以及由更新认证链接触发的。前一种循环是相似事务的重复,后一种循环是用户得到认证前的空循环。给定一个网页自动机WebA=(View,Act,AM,iv,FV),一个执行操作是一个由iv引发的View和Act的交变序列:[v0a1v1…alvl]。其中,[v0=iv,vl∈FV],且对于所有的i,[vi,ai+1,vi+1∈AM]。令Exec(WebA)为所有WebA的执行操作计划,occ(vi,e)为执行操作e中出现vi的次数。文中记录除去所有来自e的View活动序列L(e)和出现在e中的View集V(e)
定义2 拥有n度的A测试标准[TnA]定义如下:
[TnA={L(e)e∈Exec(WebA),?v∈V(e):occ(v,e)≤n+1}]
显然,[T0A],[T1A],[T2A],…是递增数列且[n=0∞TnA=][L(WebA)]。
在很多时候,[T0A]给出了一组大量的测试序列,图4显示了网页应用的测试框架。
在这一框架中,通过一个网页应用配置构造了网页自动机,然后提取了执行操作。接着根据测试标准进行了测试,从[Tn]开始直到得到满足条件的结果。测试标准的最大维度取决于测试中的网页应用,若任何循环均无副作用,则[T0]就足够了。
将测试标准应用在Weblib中。如前所述,特征值为L(Weblib)的正则表达式Replib如下:
[Replib=(Path1+Path2)(link_search(Path1+Path2))]
其中,
[path1defCertifyAct/NG?(CertifyAct/mod(ModifyAct/success+ModifyAct/failure)+CertifyAct/reg(RegistAct/success+RegistAct/failure))Path2def(QueryAct/list(e+link_detail)+QueryAct/detail)(e+Path1)]
此处描述测试标准为[T0]和[T1]时的测试序列,使用[ReplibTi]来表示语言限制为[Ti],如下:
[ReplibT0=Path01+(QueryAct/list(e+link_detail)) (e+Path01)]
其中,
[Path01def(e+CertifyAct/NG)×(CertifyAct/mod(ModifyAct/success+ModifyAct/failure)+CertifyAct/reg(RegistAct/sucess+RegistAct/failure)+QueryAct/detail))]
注意到CertifyAct的ActionServlet被重新激活多次,但由于其不是JSP,所以不会对测试标准造成影响。
4 Struts的应用
将Struts的配置方案扩展以直接描述行为。主要增加了JSP和动作映射的结合信息。通过这种扩展,可以在Struts中描述一个网页应用的网页自动机。本文为视图组件创建了一个配置文件(wsm?config.xml),该扩展描述了JSP间的转换关系。如图5所示。
图5显示了图书馆管理系统中的struts?config.xml 和wsm?config.xml,网页自动机Weblib由以下部分组成:iv指定为初始状态元素的路径属性,FV则代表了终止状态元素的路径属性。视图和部分AM指定为视图映射元素,每个拥有路径属性的视图元素指定一个视图和由该视图链接的可能状态转换。动作链接元素定义了一个由其路径属性所请求的Servlet调用的状态转换。AM的其余部分由struts?config.xml中的一个动作映射元素所指定。根据每个和活动链接中路径元素所匹配的动作元素,这些元素表明哪一种Servlet活动应被激活以及哪些JSP应被活动Servlet执行的结果所调用。因此,AM是被视图元素中的活动链接元素及映射活动元素所指定的。
5 结 论
本文提出了一种基于MVC模型的网页应用测试框架,首先定义了一种网页应用的行为模型,并在J2EE平台上采用JSP/Servlet技术实现的MVC结构展示了一种面向Jakarta Struts框架的应用。该模型直观地呈现了网页应用全面的行为,且在这种行为模型下进行了测试。本文的重点在于网页应用的特性,即通过重访某些页面经常导致相似的页面转换,为此提出了基于重访问相同页数量的测试标准,相比较其他测试其更为精确。尽管测试标准基于测试中的网页应用的特性,在众多情况下预期最简单的测试标准可涵盖哪些仅重复访问一次的测试序列。
参考文献
[1] 林艳琴.Web功能测试自动化的研究与应用[D].成都:电子科技大学,2010.
[2] 侯婷.基于Web功能测试自动化研究与应用[D].青岛:山东科技大学,2014.
[3] 邓璐娟,范乃梅,孙义坤,等.基于Web应用的性能测试模型研究[J].计算机工程与应用,2013,49(1):75?77.
[4] 王新.基于MVC模式的通用Web软件系统开发框架设计与实现[D].成都:电子科技大学,2007.
[5] 郝红岩.基于MVC模式的Web框架的应用研究[D].武汉:武汉理工大学,2013.
[6] 王俊芳,李隐峰,王池.基于MVC模式的ThinkPHP框架研究[J].电子科技,2014,27(4):151?153.
[7] ATKINS D L, BALL Thomas, BRUNS Glenn, et al. Mawl: a domain?specific language for form?based services [J]. IEEE transactions on software engineering, 1999, 25(3): 334?346.
[8] 欧阳宏基,葛萌.基于Struts2与Hibernate框架的Java Web应用研究[J].自动化技术与应用,2016,35(2):48?52.
[9] MORALES?CHAPARRO R, LINAJE M, PRECIADO J C, et al. MVC web design patterns and rich internet applications [J]. Proceedings of the jornadas de ingenier?a del software y bases de datos, 2007, 32(5): 98?104.
【关键词】 MVC 学生信息 管理系统
近年来,如何有效地管理学生信息,成为了各个学校面临的一个难题。学生的信息是多种多样的,其包含的数据量大,涉及的人员和部门广,并且需要随时更新。与此同时,学校在对学生信息的管理上也比较分散,不仅存在管理凌乱的现象,而且存在重复管理的问题,对学生信息的管理不能做到统一、规范和高效。
基于以上情况,本文提出了基于平台和MVC的架构,采用 MVC技术进行学生信息管理系统的设计与实现,希望能够对学生信息进行有效的管理,使得学生信息的管理更加快速、准确、方便。
1 MVC 框架
MVC是由微软官方提供的基于MVC架构模式的开发框架,是一个易于开发、易于测试、易于维护的框架,也是现今流行的一种MVC开发技术。在 MVC框架中,通过模型、视图和控制器的功能分离,充分地实现用户输入、业务制定和界面显示的独立。
从用户在浏览器中输入请求信息,到在页面获得处理结果,大致需要经过5个步骤。
(1)用户在浏览器中发出信息请求,向控制器发送相关的操作命令。
(2)控制器接收到请求命令之后,向模型请求获得有关的数据信息。
(3)模型根据请求将对应的数据信息返回给控制器。
(4)控制器将相关的数据信息发送到相应的视图。
(5)相应的视图将获得的数据信息返回到浏览器,显示给用户。
在 MVC的具体开发过程中,主要的工作是对控制器进行程序编写。因为控制器既要处理用户请求,又要实现与模型进行数据通信,以及向视图发送数据信息,控制器在模型、视图、控制器三者中处于一个中枢的位置。
3 学生信息管理系统的设计
建立学生信息管理系统,实现数据处理的统一、规范和高效,通过对学生信息管理系统的需求分析,希望能够探索出信息处理的最佳途径。
3.1 需求分析
学生信息管理系统主要是围绕与学生有关的数据信息进行处理的,应当具有登录管理、课程管理、学籍管理、成绩管理、德育管理等功能模块。
(1)登录管理模块:系统管理员设定每个用户的登录用户名和初始密码,并对用户名和密码具有修改和删除的权限;同时,系统用户登录系统之后也能够对自己的登录信息进行修改。
(2)课程管理模块:课程信息是属于稳定性比较强的一类信息,而且课程的开设与取消在学校的权力范围之内,系统管理员在系统中扮演学校的角色设置课程的基本信息,并对课程的相关数据进行处理。教师只能查看课程的基本信息。
(3)学籍管理模块:系统管理员根据学号为每个学生分配系统的登录信息。学生将个人资料信息按照学籍内容的要求输入到数据库,并根据实际情况对信息进行及时的修改,以确保信息的准确性。教师可在通过不同的条件查找学生的学籍信息,了解学生的基本情况。
(4)成绩管理模块:教师按照课程的考核要求进行不同方式的考试,考试结束后将学生的考试成绩输入到系统,对有错误的成绩数据进行编辑。学生参与课程学习并参加考试之后,能够查阅自己的成绩。
(5)德育管理模块:教师负责录入每位同学的德育评价等级,并对录入有误的评价等级进行编辑。学生能够查阅每月的德育评价等级,从而端正自己的日常行为。
3.2 功能设计
学生信息管理系统在实际的使用过程中,主要有三类用户:系统管理员、教师、学生,因此管理系统对应地分为三类用户端:系统管理员端、教师端、学生端。他们的功能权限分别是:
(1)系统管理员端:系统管理员在学生信息管理系统中的操作平台,系统管理员进入该平台后可以修改自己的登录密码,并进行登录信息管理和课程信息管理两个模块的操作。
(2)教师端:教师用户在学生信息管理系统中的操作平台,教师进入该平台后可以修改自己的密码,查看课程信息和学生的学籍信息,并进行成绩信息管理模块和德育信息管理模块的操作。
(3)学生端:学生用户在学生信息管理系统中的操作平台,学生进入该平台后可以修改自己的密码,编辑自己的学籍信息,并可查看考试成绩和德育评价信息。
4 学生信息管理系统的实现
本学生信息管理系统采用 MVC架构技术,主要开发语言为,数据库系统为SQL Server。
现以系统管理员端的课程信息管理功能的实现过程为例,介绍 MVC的开况。课程信息管理功能包括对课程信息的查询、添加、修改和删除。首先使用SQL Server创建课程信息表,包括字段课程编号、课程名称、课程学分、课程类别、考试性质、考试时间等。
(1) 模型(Model)的实现:定义一个 实体数据模型,数据来源于课程信息表。
(2)控制器(Controller)的实现:立一个控制器,用来实现课程信息管理模块的查询、添加、修改和删除的功能的。
(3) 视图(View)的实现:创建cshtml页面,用于显示课程的基本信息,并提供管理操作以及相关的超链接。
4 结语
本文根据学校在学生信息管理中存在的问题,提出了采用 MVC框架开发较复杂的学生信息管理系统,搭建了完整的基于 MVC框架结构的信息管理系统。学生信息管理系统的应用,给学校的学生信息管理工作带来了改变,实现学生信息管理朝着规范化、科学化、现代化的方向转变,提升学校的管理水平和工作效益。
参考文献
[1]贡博文.浅谈网站建设中MVC与三层架构技术[J].科技风,2013.
[2]周文红.基于 MVC框架的Web应用开发[J].计算机与现代化,2013.
[3]沈伟.基于Web的高职学生信息管理系统的设计与实现[J].泰州职业技术学院学报,2014.
作者简介
邓俊英(1981-),广东省佛山市人。大学本科学历。现为佛山市华材职业技术学校计算机中学一级教师。研究方向为计算机技术。
关键词:MVC Struts Spring
0 引言
MVC框架是Xerox PARC在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,其中M是指数据模型,V是指视图界面,C是指控制器,使用MVC的目的是将数据模型和视图界面实现代码分离,从而使同一个应用程序可以使用不同的表现形式,目前MVC在Java EE里已经广泛使用,并不断有新的MVC框架。各个MVC框架都有各自的优势和不足,在进行项目开发的过程中,如何选择一个合适开发框架就是需要重点考虑的问题,选择了合适开发框架可以提高开发的效率。本文将主要对于目前最流行、最常用的两类MVC框架Struts、Spring MVC进行简要介绍,并对比两者的不同之处。
1 struts简介
Struts是Apache软件基金下Jakarta项目的一部分。Struts框架的主要架构设计和开发者是Craig R.McClanahan。Struts是目前Java Web MVC框架中不争的王者。经过多年的发展Struts已经逐渐成长为一个稳定、成熟的框架,并且占有了MVC框架中最大的市场份额。
1.1 struts的体系结构 struts是一个基于Sun J2ee平台的MVC框架,它将Servlet和JSP标签作为实现自身功能的一部分。MVC的每个特征Struts都有,而且还在他的基础上有了进一步的创新,它的体系结构如1-1所示。
图1-1向我们展示了Struts的体系结构的三部分:视图(View),模型(Model)和控制器(Controller)。
视图(View):Struts的视图主要是JSP文件。Struts提供了许多定制JSP标签,它们使用起来简单、功能强大,在创建视图界面的时候使用Struts标签可达到事半功倍的效果。模型(Model):模型组件代表应用的业务数据和逻辑。Struts中的系统模型的状态主要由ActionForm Bean和值对象来体现。控制器(Controller):Struts的控制器主要是ActionServlet,但是操作业务逻辑的则是Action、ActionMapping和ActionForward,业务逻辑工作主要是在他们的相互作用下实现的。其中Action是真正的业务逻辑的实现者,ActionMapping与ActionForward的任务是指定不同的业务逻辑或流程的运行方向。
1.2 struts的工作原理 在Struts中,担任控制器工作的是ActionServlet,所有的请求都会发送给ActionServlet,当ActionServlet接受到一个请求时,会根据URI来决定使用哪一个Action处理请求。如图1-2所示:
在上图中,当ActionServlet接受一个来自客户端的请求时,执行以下操作:①检索和请求相匹配ActionMapping实例,若是匹配就进行下一步创建ActionForm,但是若不存在则返回请求路径无效500错误信息。②检查是不是存在ActionFrom实例,若不存在,就创建一个ActionForm 对象,在ActionFrom中保存好用户提交的表单数据。③是否需要表单验证(validate)是由其配置决定的,验证时采用的是ActionForm的validate()方法。④ActionServlet从ActionMapping实例所包含的映射信息出发,最终决定由哪个Action接收,如果不存在相应的Action实例,那就要先创建一个合适的Action实例,然后调用Action的execute()方法。⑤Action的execute()方法返回一个ActionForward对象。ActionServlet把转发给ActionForward对象指向的jsp组件。⑥ActionForward对象指向的jsp组件生成的动态网页,返回给客户端。
1.3 struts的优缺点
1.3.1 优点 ①实现MVC模式,结构清晰,这样开发者只关注业务逻辑的实现。②可使用的tag有很多,Struts的标记库(Taglib),如能灵活动用,就会使开发效率变得高很多。③页面导航。这一功能在以后的发展中表现出了良好的前景,实际上,这样可使系统的脉络更清晰。④提供Exception处理机制。⑤数据库链接池管理。⑥支持I18N。
1.3.2 缺点 ①Struts的Action必需是thread-safe方式,它要求只需一个实例处理全部请求。②Struts的每个Action都会跟Web层耦合起来,进行测试时离不开Web容器,也不容易进行单元测试。③Struts的FormBean将全部数据都看做String类型,它可借助工具Commons-Beanutils做类型转化。但它的转化都是在Class级别,而且转化的类型是不可配置的。不容易将类型转化时的错误信息返回给用户。④Struts处理Action时离不开ServletRequest 和ServletResponse,所以必须要有Servlet容器。⑤Struts创建一个Action,极其不容易控制它的执行顺序,而且要想实现这一功能,很可能需要重新去写Servlet。⑥Struts处理Action以class的hierarchies为基础,不容易在action处理前和后进行操作。
关键词:ThinkPHP MVC Bootstrap 招投标 架构设计
中图分类号:TP311.52 文献标识码:A 文章编号:1007-9416(2016)12-0165-01
1 招投标平台的需求分析
本招投标平台是建筑行业平台级的产品,主要是服务建筑行业内的专业性企业、个人以及专家,通过整合建筑行业资源、以建筑行业项目和服务为纽带,致力解决行业项目和服务招投标不规范、不透明、交易成本高企的现状。本文从功能性需求和非功能性需求两个方面进行需求分析。
1.1 功能性需求分析
本招标平台分为两个主要流程:用户注册流程、招投标流程。(1)用户注册流程。用户通过短信验证码注册后,完善用户资料,成为注册用户;用户上传照片或者扫描件进行身份和建筑行业资质认证,平台后台认证后,用户成为认证用户;用户缴纳平台会员费后成为VIP用户。(2)招投标流程。用户招标项目和招标文件,符合项目条件的用户可以投标该项目,招标者在竞标列表中选标,中标者实施该项目,完工后提交验收、缴纳专家审核费,专家确认是否验收通过,最后由招标者决定项目是否结束。
1.2 非功能性需求分析
(1)终端设备支持。平台可以支持PC端浏览器、手机浏览器以及微信端浏览。(2)安全要求。对于需要登录后才能访问的页面要禁止非法访问等。(3)性能要求。网络正常的情况下,大于2MB/秒,1000人以下并发访问页面打开时间最多不超过5秒。
2 招投标平台MVC框架的选择
通过技术平台选型,考察 MVC、Struts2、Spring MVC、ThinkPHP、Yii等多个MVC框架后,结合技术团队能力、国内流行程度等因素,将 MVC、Struts2、ThinkPHP作为备选技术方案。ThinkPHP中的MVC提供了一种敏捷开发的手段,使得开发者能够迅速地开发出稳定的企业级网站[1]。ThinkPHP在中小型应用中,学习成本最低、开发效率最高,所以在国内PHP MVC框架应用中占据了将近50%的市场份额。本平台是一个中等规模的网站,根据前述非功能性需求分析得出,并发访问量要求不高,且用户预算低、开发周期短,所以决定平台采用ThinkPHP框架。
3 招投似教ǖ募芄股杓
3.1 平台架构的设计
为了进一步压缩成本,缩短开发时间,从架构设计上既要满足前述用户需求,又要减少开发工作量。因此平台通过共用控制器和模型,采用多视图的方法满足用户PC端、手机端、微信端浏览本平台的需求,而前端则采用Bootstrap框架进行快速页面布局和前端编程。Bootstrap是最受欢迎的HTML、CSS和JS框架,用于开发响应式布局、移动设备优先的WEB项目[2]。根据需求分析,本平台部分技术架构设计如图1所示。
限于篇幅,本架构主要展示了平台Home前台的架构设计,前台Home和后台Admin共用Common\Model,前台PC端View和移动端MobileView共用了前台Controller,从而减少了开发冗余,提高了代码复用率,大幅压缩了开发成本和开发周期,提高了软件质量。
3.2 前台控制器基类的实现
FrontController是前台控制器的基类,只有一个方法_initialize,继承该基类的前台控制器都会执行该方法。_initialize方法通过ismobile函数判断,如果是手机端或者微信端浏览,则通过C(‘DEFAULT_V_LAYER’,’MobileView’)函数将默认视图层从View目录改成MobileView目录,从而改成适合手机浏览的网页,而控制器类和模型类无需修改。如果用户没有登录,用户访问了需要登录才能访问的控制器方法,则将链接重定向登录方法,强制用户登录。
4 结语
MVC轻量级ThinkPHP框架,基于面向对象的思想,结合使用了Ajax技术,使整个系统功能清晰明了[3]。本平台选择ThinkPHP框架进行架构设计,采用多个视图共用一个控制器方法的方式支持多终端设备浏览器,满足了招投标平台的功能性需求和非功能性需求,提高了开发效率、缩短开发周期并节约开发成本,具有较好的技术推广价值。
参考文献
[1]徐诚斌,王金平.MVC在ThinkPHP框架中的应用研究[J].信息与电脑:理论版,2011(3):160-160.
关键词: WebForm;MVC;设计模式;三层架构;MVP
The Research Of MVC
Tu Gang Li Jian Liu Huaqing Ji Yongling Xu Zihao
(Jiangsu Vocational And Technical College Of Finance & Economics Jiangsu Huanai 223003)
Abstract: The essay describes the development of Microsoft's Web App Platform Stage and analyses of WebForm, MVC, Three Tiers and MVP. The essay recommendations to the picking of design pattern and software framework in the use of project, it introduces that what should be involved in View, Control and Model of MVC.
Keywords: WebForm, MVC, Design Pattern, Three Tiers, MVP
1 引言
MVC Framework是微软官方提供的MVC模式,是编写 Web应用程序的一个框架。此前已习惯了运用 WebForm开发模式的设计人员运用MVC模式可能会有所困惑,为什么微软推出 MVC Framework?同时,在 WebForm开发模式设计Web应用程序开发时,设计人员可能会运用三层结构架构Web系统,而MVC模式也是由三个事物组成,因此技术人员就会产生疑惑,容易将二者混为一谈。
通过 WebForm、MVC、三层结构以及MVP之间进行比较,为Web应用程序开发人员在项目开发设计中选用不同的开发模式和软件结构来架构系统提供了参考。同时结合江苏省大学生实践创新训练项目“基于 MVC的校内大学生社区系统设计与实现”,介绍了 MVC在Web应用程序系统开发中其View、Control和Model中应包含哪些具体内容,为 MVC的运用提供了借鉴的方法和技巧。
2 MVC与相关技术
2.1 MVC
MVC―― MVC的推出确实大大改变了Web App的开发方式,很多Web Form下的方式不被提倡了,如服务器端控件将被抛弃,转而再次使用客户端控件;事件驱动模型被抛弃,转而使用了类似传统的URL跳转处理模型。而且在数据验证等方式上与Web Form下提倡的方式有了很大变化。
MVC是1979年提出的,起初是用于软件的一种架构模式。模型-视图-控制器(MVC)是Xerox PARC在上个世纪八十年代为编程语言Smalltalk-80发明的一种软件设计模式[1],然后被推荐为Sun公司J2EE平台的设计模式,并且受到越来越多的使用 Cold Fusion 和 PHP 的开发者的欢迎。
MVC (Model-View-Controller) 在 Java / JSP / J2EE 中已广泛运用,并衍生出 Struts 等开放源码的 Framework (框架)。其主要目的是为了在开发复杂的大型网站时,能将不同的功能作切割,提高程序代码的可读性,以及组件的可重用性。其结构如图1所示[1]。
2.2 ASP. NET MVC与WebForm
MVC与Webform技术的架构如图2所示[2]。
MVC将WebForm中的一个IHttpHandler换成了两个IHttpHandler。Web Form中Page(IHttpHandler)既负责业务逻辑又负责显示,在MVC中换成了两个IHttpHandler,第一个Handler负责业务逻辑,第二个Handler(ASPX)是View,用于显示的。在MVC中的业务实际执行时间被提前到了HttpMolde中,而Web Form的请求只在httpHandler容器中被执行。即MVC中Controller与View的分离是使用的请求管道隔离实现的,这样在不影响效率(一次请求,而 MVC使用了HttpModules来拦截地址请求,具体用到了System.Web.Routing类库(MVC2中)。在Application_Start时,UrlRoutingModule类拦截请求,给RouteTable的全局对象一个拦截的设置,设置使用RouteCollection对象进行保存,MVC对这个类进行了扩展――RouteCollectionExtensions。客户访问页面时,UrlRoutingModule类拦截请求,在RouteTable中查看是否符合规则,符合就调用MvcHandler。MvcHandler的ProcessRequest方法再调用Controller;从而达到代码的逻辑层次上的分离,实现了Controller代码的单独管理。显然MVC模式有利于理解分层逻辑,把握代码的层次感。Controller到aspx页面之间的过程,已经被MVC框架隔离。至于Controller或者View页面与Model调用的过程,则由开发人员来控制。
MVC纵向切割了开发过程中的代码,从服务器到浏览器层层分离,层次之间耦合度很低,因为它是顺着底层的开发脉络进行封装,所以有利于开发者对整个程序过程流转的理解。但是MVC有一个非常大的缺点,这个缺点是和整个软件发展思路相背离的,那就是它无法封装,所以无法被重用。MVC只适合轻量级的开发,桌面开发是极少用到的。Web开发恰恰就是轻量级,因为网络硬件条件的限制,不需要也无法做到非常复杂的逻辑。这也是MVC非常非常适合Web开发的原因[3]。
WebForm中页面请求则只在HttpHandler容器中执行,对其进行分层,只能依靠逻辑上分离。Web Form模型中事件必须被注册到页面里,比如Button1_Click这样的代码。Page_Load方法在页面装载时执行,而Button1_Click必须在客户点击后才能执行;而显示代码被写入Page_Load方法中,这就造成了需要编写额外的代码量,如if (!Page.IsPostBack)。而在Button1_Click执行后如果需要显示,则比较难处理。替代的解决方案是使用Response.Redirect,在一个aspx页面中处理逻辑,处理后跳转到另外一个显示的页面。这样在两个页面中数据很难共享,加外跳转时就会多一次请求。当然可通过Server.Execute,Server.Transfer或者Context.RewritePath等处理方式实现数据共享,两个页面转换则在服务器端完成[4]。
通过分析可以知道,MVC框架在Web应用开发方面具有很强的优越性,而Web Form也有一定优势,在简单的应用中更加容易开发。WebForm也可实现和MVC一样的分层方式,只是处理时需多写一些代码。用WebForm开发分层遇到的最大问题是页面之间数据的传递。 MVC与WebForm比较起来,WebForm更容易理解,不会产生复杂的配置。
WebForm横向切割了代码,控制和显示是封装在一起的。从开发者思维逻辑上而不是实际情况上对代码进行封装,开发WebForm容易上手的原因也就在此了,但这不利于开发者对底层程序流转机制的理解。WebForm中View和Controller是在一起的,WebForm出现后,诞生了大量的组件,这是MVC模式所不及的。微软的经验之一是硬件发展很迅速。代码的封装是靠牺牲运行效率来提高开发效率,牺牲的运行效率通过提高硬件性能来解决。但这个经验不适合网络硬件,网络硬件要考虑兼容性而且是国家的基础设施,更新的灵活性远比单机要差。可用如图3来说明[4]。
2.3 ASP. NET MVC与三(N)层架构
N层结构是一种软件抽象的层次结构,是对复杂软件的一种纵向切分,每一层次中负责同一类型的操作,以便将各种代码以其负责的功能作为依据来分割,以降低软件的复杂度,提高其可维护性。一般来说,层次之间是向下依赖的,下层代码未确定其接口(契约)前,上层代码是无法开发的,下层代码接口(契约)的变化将使上层的代码一起变化。三层结构是N层结构的一种,是人们在长时间使用中得出来的一种应用场合广泛的N层结构,被当作一种典型的软件层次结构而广为流传。这里所说的三层架构[1]指:表现层(显示层)、业务逻辑层、数据访问层(持久化),如图4所示。
MVC中的三种构造型元素之间并不存在明显的层次结构,没有明显的向下依赖关系,相反的,View和Model往往是比较独立的,而Control是连接两者的桥梁;MVC中每个块可以独立测试的。而三层结构中,上层模块的运行或测试都必须要提供下层代码或者提供相应接口。相对来说,MVC复杂得多,但是结构更清晰,耦合性更低。MVC中每一块内部(特别是Model)常被设计为多层。一个良好的MVC模式构建的结构中,Control是核心,小且较为稳定的,可作为一个核心框架来提供,并提供扩展点,只需要简单配置就可以运行。而View则可能是一套或多种供选择的视图引擎,决定了系统展示给用户的界面,使用时的主要工作量在于扩展点以及根据需要而设计的视图模板。Model则是业务提供者,决定了系统提供的功能,其内部可能是一些普通的类或是实现了某些接口的类,对于复杂的软件可能会分成很多层,如业务逻辑层、业务提供层、系统提供层、数据提供层、数据访问层等。MVC与三层架构之间的关系如图5所示[5]。
2.4 MVP与MVC
随着和Windows窗体用户界面创建技术越来越强大,让用户界面层负责多于它本应做的事是很常见的。没有一个清晰的职责划分,界面层经常沦为一个包含实际上应属于程序其他层的逻辑的容器。有一个称为:模型(Model)-视图(View)-提供器(Presenter)的设计模式(MVP),特别适合解决这个问题。
MVP设计模式将界面层中的逻辑和代码重构为更加易于测试的、新型的、可重用的代码。MVP即可以应用到Web项目中,也可以应用到Windows Form项目中,MVP方便测试机制为大型复杂的企业级应用开发带来极大的方便,MVP模式有Model-Presenter-View三个层次,如图6所示。其中Controller层是负责状态保存和页面跳转的,可根据需要进行设置。
MVP模式中Model、Presenter与View的关系如图7所示,Model并不与View直接通信,Presenter将充当中间角色。在MVC中,当Model被Controller更新后,会直接通知View并更新显示。从两者模式图中发现MVP与MVC最大的一个区别就是Model与View层之间是否存在通信(甚至双向通信)。在MVP模式下的Presenter拥有“绝对权力”。如果没有它,Model与View就是两个孤岛,完全解耦了的。因此MVP中的View只从实现相应IView接口中的属性和方法,而最终调用IView接口下的哪个视图实例则完全交给Presenter。
Supervising Controller模式是对MVP模式作了一定变动,如图8所示。与图7所示的MVP模式主要有以下区别。
(1) Presenter实现复杂的View逻辑;(2) View实现部分逻辑;(3) View可以与Model绑定,Model的变化可以通知View;(4) 这种模式下,Presenter和View是松耦合,Presenter可以和多个View直接通信。
Supervising Controller模式其实很接近于MVC模式,只是提供了Presenter与View之间的“双向通信”。
3 MVC在项目中的应用
MVC模式中,View中的逻辑比较简单,重点放在Model中,而Controller是对业务流程的控制,应该保持“代码清爽”。业务逻辑是系统架构中体现核心价值的部分,主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计。View是显示逻辑,Controller是流程控制逻辑,Model是“逻辑大本营”。使用 MVC 框架时要将“经常变化”的业务规则(位于Controller)和相对稳定的业务逻辑(位于Model)分离开。为适应不断变化的业务需求,在Model层采用接口方式实现。
“基于 MVC的校内大学生社区系统设计与实现”省大学生实践创新训练项目中主要运用Robustness分析方法,找出哪些对象应放在Model中,哪些属于控制逻辑。Robustness分析方法将系统中的对象分为实体对象、边界对象和控制对象。
(1)实体对象(entity object)。
通常是来自域模型中的对象(也就是现实世界),它常对应于数据库表和文件,这些数据表和文件中存储了执行用例所需的数据。有些实体对象是临时“对象”(如搜索结果),当用例结束后将消失。
(2)边界对象(boundary object)。
参与者使用它来同系统交互,通常包含窗口、屏幕、对话框和菜单。如果有GUI原型,就可知道许多主要的边界对象。
(3)控制对象(control object)。
将边界对象和实体对象关联起来(通常被称为控制器,因为它们通常不是真正的对象),包含大部分应用逻辑,它们在用户和存储的数据之间架起一座桥梁。控制对象中包含经常修改的业务规则和策略。这样修改时只需要在这些对象中进行,而不会涉及到用户界面和数据库模式。控制器偶尔也会是设计中的“真正对象”,但大部分控制器只是一个占位符,用于避免遗漏用例要求的任何功能和系统行为。
实体对象、边界对象和控制对象分别对应MVC的Model、View、Controller三种构造型元素。对象的划分有四个交互规则。
(1) 参与者只同边界对象交互;(2) 边界对象只能同控制器和参与者交互;(3) 实体对象只能同控制器交互;(4) 控制器可同边界对象,实体对象以及其他控制器交互,但不能同参与者交互。
四个规则可描述为:边界对象和实体对象都是名词,而控制器是动词。名词和名词之间不能交互,但动词之间可以。
4 结束语
微软公司推出 MVC Framework让Web开发设计人员多了一个选择。文章对WebForm、 MVC和MVP三种软件模式和三层架构进行了分析,对软件模式的选择提出了参考性的建议,在项目开发过程中,结合具体情况选择能充分发挥该模式优点和项目开发人员自身特长的软件模式。具体介绍了 MVC中Model,View和Controller三种构造型元素各应包含哪些内容。
MVC Framework推出时间较短,对 MVC Framework研究处于了解、运用阶段。并且,微软公司必将推出 MVC Framework的更多模板,因此,还存在许多问题需要进一步探讨和研究。
参考文献
[1]Buschmann et al. Pattern-Oriented Software Archtiecture. John Wiley & Sons,1996,pp. 125-143.
[2]/mvc/whatisaspmvc/
[3]/zh-cn/magazine/dd252940.aspx
[4]/zh-cn/magazine/dd252940.aspx
[5]/zh-cn/library/ms978748.aspx
关键词:MVC模式;数据查询;优化设计;Hibernate
1 MVC框架模式
MVC(Model-View-Controller)框架模式通过模型、视图、控制器,分别对程序的输入、处理和输出进行控制,三者相互独立,不会因为其中一项的改变而影响其他内容的变化。其中,模型可以为视图提供数据,同时进行业务逻辑关系的处理;视图用于接收命令和显示相应的数据;控制器则专门控制用户的输入和输出。如图1所示:
2 数据查询设计
原始的Web程序开发以服务器端开发为主,在程序设计中,以独立编写的SQL命令语句直接对数据库进行查询,这种命令语句直接编写在页面代码中,甚至数据库的账户密码都暴露给程序阅读者,很容易被他人所用,给程序的安全性造成很大的隐患。
JAVA提供的Web开发JSP+Servlet+JavaBean可以在一定程度上解决上述问题,它是用JavaBean来封装逻辑程序、用户参 数及账户密码,以JSP显示程序输出结果,大大提高了程序设计的安全性。其实现方式及对应的MVC模式如图2所示:
如上图所示,以Servlet控制用户请求、显示响应结果,在接受用户请求时,以参数作为用户请求的载体,将参数的安全性验证设计到业务逻辑中,即在JavaBean中内置变量,其方法中的变量userpassWord即用户输入的密码验证程序如下:
String userpassWord;
public void setUserpassWord(String s)
{
userpassWord=s;
}
public String getUserpassWord()
{
return userpassWord;
}
sql.executeQuery("select * from user WHERE userpassword='"+userpassWord+"'");
用户名及其他参数类同,这种通过Servlet只调取JSP中的参数,在封装的JavaBean中进行参数处理,然后对数据库进行查询进而核对参数正确性的验证方法,在很大程度上保障了程序和数据库的安全性。
3 数据优化设计
在对庞大的高校一卡通数据进行查询功能设计中会面临诸多难题:其中最为常见的就是为了数据序列的一致性,需要分析数据对象持久性;要处理好以上问题,就要借助MVC框架模式来进行程序优化设计,同时借助Hibernate的作用,Hibernate包含6个核心接口:Session、SessionFactory、Transaction、Criteria、Query和Configuration,这6个核心接口应用甚广,可以把数据对象进行模型化存储,将数据信息储存到本地磁盘后,根据实体类进行数据关系映射,对持久化对象进行存取,从而能够保证在处理数据对象时保证数据序列的一致性。
例如应用程序通过Hibernate保存java.sql.Clob实例时,必须包含两个步骤:(1)保存一个空的Clob实例在数据库事务中,(2)锁定此记录,更新保存的Clob实例,把长文本数据写入Clob实例中,其代码如下:
…
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Customer customer = new Customer();
customer.setDescription(Hibernate.createClob("")); //先保存一个空 的clob
session.save(customer);
session.flush();
//锁定此记录
session.refresh(customer,LockMode.UPGRADE);
oracle.sql.CLOB clob = (oracle.sql.CLOB) customer.getDescription();
java.io.Writer pw = clob.getCharacterOutStream();
pw.write(longText);//longText为长文本字符串
pw.close();
mit();
session.close();
在处理数据类型的问题上,Hibernate通过内置的映射类型和客户化映射类型来实现,内置映射类型可以将一些常见的JAVA类型映射到相应的SQL类型,用户还可以实现UserType和CompositeUserType接口,从而灵活地定制客户所需映射类型。
通过以上实例可以看出,Hibernate主要是作为数据持久性框架来使用,其对应MVC模式中的模型,它的主要作用是处理事务流程,把数据库中的关系表通过ORM映射为对象,将常用的数据查询程序对应到一个控制器,从而达到封装和优化的目的。
参考文献:
关键词:SSHJ2EE框架技术
SSH是一种基于J2EE技术的MVC软件开发框架,它可以大大降低J2EE程序开发的难度,提高开发效率?本文试图通过对SSH框架的组成与功能进行深入的分析,揭示其较传统J2EE开发工具的先进之处。
1. SSH框架技术简述
集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,利用Hibernate框架对持久层提供支持,业务层用Spring支持。相比传统的J2EE开发工具,它具有一系列独特的优点?
首先,SSH框架能够有效的降低开发成本?缩短开发周期?SSH作为一款开源的框架,无需部署在成本极高的大型服务器上,很多时候只需要配合APACHE一类较便宜的服务器使用。
其次,SSH作为一款轻量级的框架可以有效降低系统开销,同时它还可以与异步JavaScript和XML框架同时使用,不仅能够对用户体验产生极大的改善,且有助于提升系统性能。
最后,由于SSH框架建立于J2EE的基础之上,所以其同时具备了J2EE的安全性与跨平台优势?同时由于其往往将组件相关的配置与关系写入XML配置文件,使其在面对需求变化时可通过简单的对配置信息的修改来加以实现而无需对系统进行大的修改。2. 表示层框架Struts简介
最初Struts于2002年问世的时候,由于其创始人希望其能够对标签库与JSP等开发技术有所助益,所以它被设计成了一个开源项目。它很好的对MVC系统的开发提供了底层支持,有效的缩短了运用MVC模型对WEB应用的开发周期,最终成为了MVC模式事实上的行业标准。
Struts由四个组件协同工作,其中ActionServlet类是中央控制器,在每个项目中唯一存在。而Action作为分控制器对具体流程进行实际上的控制,调用相应的业务逻辑模块来实现功能并送出结果?ActionMapping作用是帮助控制器将请求映射到操作,ActionForm的作用则是接受和存储表示层中接受的数据。这四部分共同实现了Struts框架对流程的控制,
由于Struts框架属于开源项目,这给了我们深入理解其内部实现机制的机会?总体而言,Struts的优势很明显?它的优点在于它拥有大量的成功案例可供开发者借鉴?同时提供了丰富的标记库(Taglib),可大大提高开发的效率?而它将表现与逻辑分离的做法,使得结构更加清晰,有助于开发者将精力集中于业务逻辑的实现?最后,它具有优秀的页面导航功能,这对后期的维护有着不可估量的好处。3. 持久层框架Hibernate简介
Hibernate是一款开源的对象——关系映射框架,它对JDBCAPI进行了极其轻量级的对象封装,从而极大的扩展了开发人员对数据库的操纵程度,同时它封装了数据访问的细节,使得开发者可以将更多的精力集中在业务逻辑上。
Hibernate有6个核心接口,分别是拥有负责将其初始化的SessionFactory接口,负责执行被持久化对象的CRUD操作的Session接口,负责事务相关的操作的可选接口Transaction以及负责执行各种数据库查询Query接口与Criteria接口?Hibernate通过这些接口,对持久化对象进行各种存取操作并进行事务控制。
Hibernate主要有四块内容:持久化类PO,它是数据库表的一个映射,是Hibernate的操作对象,而操作结果会反映到对应的数据库表中,映射文件XMLMapping,它存放着PO和数据库表的映射信息,如表名和类名的对应,PO的属性与数据库表中字段的对应,hibernate.cfg.xml,存放着连接数据库的配置信息已经映射文件的路径,在Hibernate初始化时Configuration会加载该文件信息到计算机内存,并创建一个SessionFactory对象,把读入的配置信息拷贝到SessionFactory对象的缓存中,HibernateAPI,主要是前文中所述的六大接口,彼此配合最终实现Hibernate对PO的各种操作并持久化到数据库中。4. Spring框架简介
Spring框架提供了一种能够完全独立于各种应用服务器并可与现有框架无缝整合的解决方案,其主要通过控制反转与面向方面编程两种方式来进行实现,其主要优点在于无论你是否使用了EJB,SPRING都能够有效的对你的中间层对象进行组织,它为数据存取提供了一个统一的框架,并能够以一种统一的方式对不同的程序与项目的配置文件进行处理,它是一个全面的解决方案,包括了非常丰富的内容,包括视图层?模型层?数据层等,它提供了很多原来只有EJB能提供的功能(如声明式事务管理),却又无须运行在EJB容器上。
Spring框架由七个有着明确定义的模块组成,其中SpringCore是它的基础部分,是控制反转的承载容器?而在此基础上衍生出来的SpringAOP则提供了对面向类编程的支持,Springweb与Springorm则分别提供了对MVC框架与ORM框架的支持,SpringDAO则简化了JDBC编程,使代码更健壮,SpringContext作为一个强大的集成工具箱,有利于进行企业级程序的开发,而相比之下,SpringWebMVC则声名不彰,尽管它作为一款MVC框架提供了比Struts更自由的配置度但却未能得到广泛的应用,以上七个模块均可单独或联合实现,具有较高的自由度。5. 使用Spring对Struts与Hibernate加以整合
我们从前文中可以清晰的看到,Struts是目前应用于MVC框架中的业界实际标准,其具备高度的可靠性与稳定性,同时将表现与逻辑分离,从而使得结构更加清晰?同时提供了丰富的标记库(Taglib)与页面导航,大大提高了开发的效率与易维护性,但是在模型层却缺少相应的实现。
而Hibernate作为目前业界最成熟的持久层框架之一,封装了数据访问的细节,使得开发者可以将更多的精力集中在业务逻辑上,极大的提高了开发效率。
SSH框架的指导思想就是将这两个框架有机的整合在一起,充分发挥出二者各自的优点, Spring通过Springweb与SpringORM两个模块分别对Struts和Hibernate两个框架进行了整合,为企业级的应用程序提供了一套模块化的一揽子解决方案,在让前者发挥出其对程序流程的良好控制作用的同时让后者负责数据库的访问,以达到优势互补、降低开发难度、提高开发效率的目的。
关键词:电商系统; Spring框架; MVC; 数据库设计; 分页显示
中图分类号:TP393 文献标识码:A文章编号:2095-2163(2014)04-0009-05
Abstract:In current e-commerce systems, due to the broadness of user query, database queries often get a large number of eligible query results. For the purpose of quickly respond to user queries, during the process of database design and access, in addition to a reasonable indexing mechanism, the query results display must be paged display. With improved Spring MVC framework, the Bo-layer is added between JSP-layer and Controller-layer, whose main role is as a parameter package. Also, from database generating, business logic configuration, Dao-layer design, Service-layer design, Controller-layer design, Bo-layer design, Jsp-layer design and so on, the paper optimizes data access process. After that , through experimental analysis, compared with traditional paging method, this method has obvious advantages in the aspects such as average response time, a clear frame hierarchy and good portability.
Key words:E-commerce System; Spring Framework; MVC; Database Design; Pagination Display
0引言
随着电子商务系统规模的增加,涉及访问的数据量可能会达到上万甚至是百万条,为保证用户浏览数据的体验效果、提升Web服务器的响应速度并减轻服务器的通信负载,就必须对查询数据进行分页显示。
在国内外的应用研究中,已提出了有关分页显示的多种方案,常见的方法有SQL分页算法、JSP分页方法、使用标签库、将查询结果缓存在HttpSession或变量中实现分页等,但在实际应用中却都存在一定的不足和缺陷。具体分析如下。
(1)直接利用数据库管理系统提供的分页功能来实现数据分页。该方法虽然可以提高性能,但不同数据库实现的方法各不相同,因而对于不同的项目缺乏通用性。
(2)将查询结果缓存在HttpSession或变量中实现分页。此方法虽然可以减少数据库的连接次数,但却会占用大量Web容器内存[1],而且会导致用户查看到的可能是过期数据。
(3)直接在数据库上建立游标,使用ResultSet移动游标实现分页,使游标定位结果集。这种方式在操作大型数据和访问用户众多的时候,却可能导致DBMS因为资源耗尽而崩溃[2]。
2基于Spring MVC分页方案
5结束语
本文针对电子商务系统中,用户查询条件宽泛导致出现大量符合条件的查询结果的问题,提出了利用改进的Spring MVC框架实现分页的方法。首先,利用Spring MVC框架,实现了表示层、业务层和逻辑层的分离;其次,在传统框架基础上做出改进,加入Bo层,对数据进行封装,缩短数据传输时间。本文的测试分析结果显示,该方法具有响应时间短、移植性高的优点。
但本文提出的方法也存在不足,当商品输入为海量数据时,其响应时间就会较长,下一步将针对此现象作出改进。其后的工作重点还包括将提出的分页技术实现相应的模块化,可以被不同项目直接调用。此外,对于频繁读取的数据,可将符合条件的数据全部读取至Web服务器,并在其上生成一个XML文件,则客户端即可直接和XML文件实现交互[7],虽然此方法已经实现,但仍存在可完善的空间,这也是未来工作的一个研究重点。
参考文献:
[1]何玲娟,蚁 龙,刘连臣. 一种松耦合高复用 MVC 模式的 Web 分页实现[J]. 计算机工程与应用,2007,43( 15) : 95 -97.
[2]崔行臣,张明光. 一种基于Struts框架的Web分页模型的设计与实现[J]. 山东科学, 2013, 26(4):60-64.
[3]丁振凡. 利用Spring MVC实现数据分页显示处理[J]. 智能计算机与应用. 2012,2(5):20-22.
[4]陈雄华, 林开雄. Spring 3.x 企业级应用开发实战[M]. 北京:电子工业出版社, 2013.
[5]Naveen Balani, Spring系列:Spring框架简介. [EB/OL]. http:///developerworks/cn/java/wa-spring1/, 2005-08-18.
关键词:Flex;RIA;框架;ActionScript;MVC
中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)16-3848-02
虽然基于HTML的应用程序具有部署成本低、结构简单、易学易用等优点,但某些应用系统并不适合采用HTML技术,因为这些复杂的应用系统要求多次提取网页来完成一项事务处理,这往往导致交互速度变得非常慢,因此,传统的Web技术已经不能满足网络用户全方位、高标准的网络体验要求了。RIA(Rich Internet Application,富因特网应用程序)的出现就是为了解决这个问题,RIA无需刷新全页,不增加带宽,而可以迅速响应用户的输入并做出相应的处理。
Flex技术是目前最流行、使用最广泛的RIA开发技术之一。2004年Macromedia推出被收购前的最为经典的版本Flash MX 2004,在这个版本中ActionScript升级为2.0版本,同时第一次引入了Flex的概念,即Flex 1.0。2005年12月Adobe收购Macromedia公司,由此带了的巨大变革,Adobe将其打造为新一代的RIA。在2006年7月了Flex 2.0,2008年2月Flex 3.0。Flex将基于标准的语言和各种可扩展用户界面及数据访问组件结合起来,使开发人员能够快速构建具有丰富数据演示、强大客户端逻辑和集成多媒体的应用程序。使用Flex构建的应用程序能够在所有常见桌面平台上运行,支持对应用程序外观进行完全自定义,并支持各种连接到后端数据和服务的方法。
1 Flex技术
Flex 是一个高效、免费的开放源框架,可用于构建具有表现力的Web应用程序,这些应用程序利用Adobe Flash Player和Adobe AIR, 运行时跨浏览器、桌面和操作系统实现一致的部署。使用 Flex 创建的 RIA 可运行于使用 Adobe Flash Player 软件的浏览器中,它们可以跨所有主要浏览器、在桌面上实现一致的运行。连接到 Internet 的计算机中超过 98% 装有 Flash Player,这是一个企业级客户端运行时,它的高级矢量图形能处理要求最高、数据密集型应用程序,同时达到桌面应用程序的执行速度。通过利用 AIR,Flex 应用程序可以访问本地数据和系统资源。
Macromedia Flash是强大的矢量动画编辑工具,在做动画起家之后,Flash一直在谋求RIA(rich internet application)富客户端的霸主地位,最有影响的是,已经推出了面向对象的编程脚本ActionScript3.0,并且建立起类似于java swing的类库和相应component(组件)。Flex是通过java或者.net等非Flash途径,解释.mxml文件组织components,并生成相应的.swf文件。Flex的component和flash的component很相似,但是有所改进增强。目前Macromedia公司已经被ADOBE公司收购。当前(2010年12月)的flex版本为4.1。
1.1 Flex框架结构
Flex框架结构如图1所示。Flex编译器Flex Builder x.0将MXML、ActionScript以及一些Flex类库编译成SWF文件,然后在客户端由FlashPlayer执行该SWF文件,实现对应用的访问。
1.2 Flex技术元素
Flex是一套Adobe的RIA技术的集合,Flex应用在多层架构中做为表示层。Flex包括:Flex SDK、Flex Builder、Flash Player、LiveCycle Data Service、ActionScript、MXML。
1)MXML。MXML是宣告式的、基于XML描述应用程序界面的语言,用来表达UI布局和相关动作;
2)ActionScript。符合ECMA(欧洲计算机制造商协会)标准的脚本语言,负责处理业务逻辑和业务建模;
3)Flex SDK。就如同Java的JDK一样,为开发人员提供了一个免费的开发套件,同时这也是一套开源项目;
4)通信服务。Flex支持Adobe公司自定义的通信协议AMF,它能够将Flash/Flex对象快速序列化、反序列化,采用二进制压缩传输数据,具有数据安全性高、传输快的优点。
1.3 Flex应用开发步骤
首先建立一个包含应用程序源代码的文本文件(MXML格式文件和actionScript脚本文件),然后通过编译器编译成可执行的swf文件,将此文件部署到服务器上。需要数据访问时,Flex可以轻松地通过 Web 服务、Java 对象访问或XML 来实现数据交互。具体开发步骤如下:
1)在文本编辑器或集成开发环境中插入MXML标签;
2)添加一个或多个容器;
3)在容器中添加控件;
4)定义一种数据模型;
5)添加一个Web服务器;
6)为数据输入添加验证;
7)为组件添加脚本;
8)将应用程序编译成SWF文件。
2 Flex的MVC框架
目前,Flex的MVC框架有:Cairngorm、PureMVC、Model-Glue、Guasax和Meta等,每种MVC框架都有各自的优缺点,因此如何选择框架,对提高团队的开发效率,使代码易于维护、扩展和重用就显得至关重要,可以从可实现性、扩展性和灵活性等方面来选择框架。
1)Cairngorm开发框架
Cairngorm是最老也最成熟的Flex框架。它现在由Adobe拥有并开源,而且被Adobe的RIA顾问服务团队大量使用。创造出Cairngorm的AdobeConsulting团队是把设计模式框架运用到RIA开发的最早的倡导者。Cairngorm中可以看到许多在JEE世界中广泛使用的MVC相关设计模式,即使它只是一个仅用于RIA用户界面开发的微型架构框架。
Cairngorm被看作是企业RIA开发框架。它的分层MVC实现有助于开发出具有复杂的业务逻辑的可伸缩的RIA应用。在异步通信、事件驱动、无线程的Flex平台上,Cairngorm为构建严肃的商业应用程序提供了快速而可靠的方法。
2)PureMVC框架
它实际上是一个ActionScript3框架。与Cairngorm不同,它完全不依赖任何Flash、Flex或其他Adobe的AS3类。因此它可用于开发任何基于Flash或者ActionScript3的应用程序。
从PureMVC的名字中就可以看出,它是根据MVC设计模式来实现的,里面包含了三层,即模型、视图和控制器。这个框架的文档很全面,它的网站上也有很丰富的信息去帮助开发者上手。
由于PureMVC是纯粹用ActionScript实现的,而ActionScript是与JavaScript基于相同标准(ECMAScript)的,强类型的,完全面向对象的语言,因此PureMVC可以很容易移植到其他OO语言。
3)Model-Glue框架
Model-Glue:Flex也是一个简单的MVCFlex框架。JoeRinehart把他最初创作的Model-GlueforColdFusion移植到了Flex。Model-Glue:Flex受到了好评。它的设计意图是成为一个比Cairngorm和PureMVC更轻量的框架,因此更便于快速原型和简单的Flex应用开发。
4)Foundry框架
ServeBoxFoundry(sbasfoundry)是为Flex2应用程序开发而设计的ActionScript3/Java框架。它根据几个设计模式而设计,还包括了一些工具,用来解决Flex2开发中一再重现的烦人问题:Model-View同步、屏幕浏览、访问控制列表(开发中)、本地化以及标签文字外部化等等。
Foundry是为中大型规模的企业RIA系统开发而设计和实现的。它包含了Java公用模块,用来将FoundryFlex插件与服务器端的进程紧密集成。
3 结束语
Flex作为一项新技术,不仅轻松解决了所有表现层的技术问题,让客户感受前所未有的WEB 应用体验,更主要的是,基与 FLASH AS3.0 的纯面向对象和组件的构架,让 B/S 结构表现层的开发层次分明,结构完整协调.在提供强大华丽表现的同时,大大节约维护成本。同时,随着FlexSDK的不断更新和完善以及Flex轻便的开发模式和良好的服务端兼容性,都将对今后Web应用的设计产生本质的影响,有利于推动未来Flex的发展。
参考文献:
[1] 吕辉.Flex 从入门到实践[M].刘晖,欧阳,杨建英,译.北京:清华大学出版社,2009.
[2] 黄曦.Flex 4.0 RIA 开发详解[M].北京:电子工业出版社,2010.
[3] /go/flex2_gettingstarted.pdf,2006,12.
[4] 郭立.基于Flex的企业级WEB应用开发的研究与实践[J].电信交换,2009(4).
[5] 吕晓鹏.精通Flex3.0-基于ActionScript3.0实现[M].北京:人民邮电出版社,2008.