前言:一篇好文章的诞生,需要你不断地搜集资料、整理思路,本站小编为你收集了丰富的mvc框架主题范文,仅供参考,欢迎阅读并收藏。
关键词:JavaScript mvc框架;DOM;Backbone.js
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)10-2242-04
Abstract: The basic structure and design pattern of JavaScript MVC framework are introduced and analyzed to achieve the client code readability, testability, maintainability and scalability in Web development. Taking the Backbone.js framework as examples, the codes of JavaScript MVC framework in Web Development are demonstrated and other precautions are elaborated in practical application.
Key words: JavaScript MVC Framework; DOM; Backbone.js
1 问题的提出
在传统的B/S软件开发中,服务器端进行业务逻辑和数据处理,客户端进行HTML页面显示,其中客户端JavaScript主要用于改善用户体验。而随着Ajax、JQuery及相关插件的推广,部分业务逻辑就无可避免地会在客户端实现。客户端的JavaScript文件很容易从几句变成几千行代码,开发人员也会陷入一系列的DOM操作和嵌套的JQuery回调函数中。开发的复杂性也日益明显,常常会出现一个人无法看懂另外一人开发的JavaScript代码的情况,很难做到客户端代码的可读性、易测试、可维护性和可扩展性。
2 MVC框架
MVC是模型(model)-视图(view)-控制器(controller)的缩写,是传统Web应用开发中服务器端广泛使用的软件开发模式,它用一种业务逻辑和数据显示分离的方法来组织代码,具有耦合性低、重用性高、可维护性高、有利于软件工程化管理的特点。最典型的MVC是JSP + servlet + javabean的模式。
1)模型(model)主要包括业务逻辑模块(web项目中的Action,dao类)和数据模块(pojo类)。模型与数据格式无关,这样一个模型能为多个视图提供数据。
2)视图(view)是用户与之交互的界面,在web中视图一般由jsp,html组成。
3)控制器(controller)接收来自界面的请求并交给模型进行处理。
典型的HTTP请求/响应过程MVC流程如下:
3 JavaScript MVC框架
当前Web应用程序在客户端有越来越多的逻辑判断和数据处理,尤其是客户端包括地理信息、本地化存储、websocket等功能时,客户端代码极难维护。为了解决这一问题,现在已有多个JavaScript MVC框架(Backbone.js、 Ember.js、 AngularJS、Knockout等)将传统的MVC框架引入到前端开发中。
JavaScript MVC框架中M代表数据,V代表DOM,C协调输入输出并操作数据,MVC框架就是将数据与DOM进行分离,它并不仅仅只是一种,还有多种扩展模式,表示为MV*(星号代表有不同选择),例如:MVP(Model-View-Presenter)、MVVM(Model-View-ViewModel)。
JavaScript MVC与传统的服务器端MVC有所不同,它主要是将数据和界面显示分开,即将模型和视图进行分离。事实上,不同的JavaScript MVC框架在控制器(controller)方面,其实现方式也各不相同。有些框架(例如Backbone.js)控制器与视图的界限比较模糊,原本部分应该在控制器中进行的操作直接就在视图中实现了,有些框架(例如Ember.js和ExtJS)则将控制器作为调度中心,用来启动应用程序、初始化数据模型、监测数据变化、调用相应操作等。
从设计模式来说,JavaScript MVC框架主要采用观察者模式、策略模式和组合模式,根据不同框架的实现方式,也可能会用到工厂模式和模板方法模式。JavaScript MVC框架采用观察者模式实现内部核心通信(当数据变化时通知观察者),通过这种方式实现多个视图绑定到一个模型并进行同步。
4 Backbone.js在Web开发中的应用
Backbone.js 是一个重量级javascript MVC框架,主要组件是模型、视图、集合和路由器。在 Backbone.js中,模型存储通过 RESTful JSON 接口从服务器检索到的数据,模型与视图密切关联,负责为特定 UI 组件渲染 HTML 并处理元素上触发的事件,路由器处理URL并在客户端进行逻辑处理。Backbone.js具有以下特点:
u强制依赖于 Underscore.js。
u非强制依赖于 jQuery/Zepto。
0 引言
随着互联网迅猛发展,使得动态网站建设要求更高,在网站开发方式上传统的模式已经无法满足人们的需要,MVC模式对这个问题进行来了很好的解决[1]。MVC作为一种开发模式在解决大型Web项目问题上发挥了重要作用。PHP是一种专业的网站的开发语言,然而现有的PHP开发模式尚未有成熟、统一的规范,系统水平的高低取决于开发人员的专业素质及经验等,已经无法满足人们在开发效率、可扩展性、可靠性及可维护性等方面快速房展的需求[2]。因而把框架机制引入PHP的开发成为人们关注的重点。
1 MVC设计模式
1.1 MVC设计模式在Web中的应用
MVC(Model-View-Controller)把数据处理、数据表示及程序输入输出控制进行分离,对不同部分对象间的通信方式进行了描述,使其不受其它数据模型及其方法的影响,从而让程序结构更加清晰并具有灵活性[3]。MVC把应用程序的输入、输出、处理强行分离,MVC的应用程序分为模型、控制器及视图三个部件[4]。MVC组件的功能及关系如图1所示。
Web应用程序从传统意义上来说一般都是由ASP/PHP进行创建的。它们把数据层代码、HTML表示层代码混合,即便开发者经验丰富、水平较高,从表示层把数据分离也具有一定的困难[5]。MVC把它们从根本上进行了强制分离,虽然MVC的构造工作量变大,但仍就有诸多优点。其一,具有低耦合性。视图层、业务层分离,视图层代码更改不需要对模型、控制器代码进行修改。同样,改变业务流程或者规则只要对MVC的模型改动就可以,不需要更改视图层代码。模型和控制器、视图是分离的,因而应用程序的数据层及业务规则改变十分容易。其二,具有高重用性、可适用性。科学技术水平不断提高,访问应用程序的方式变得多种多样。同样一个服务器端的代码MVC模式可以让多种视图进行访问如Web浏览器等。模式只能够对数据未格式化的部分进行返回,因而为不同界面的使用提供了便利。其三,具有快速开发的能力,MVC模式可以让界面设计人员对表现形式更加关注,程序员对开发业务逻辑更加重视,使系统的前端、后端同时开发,使系统开发时间大为缩短。其四,具有可维护性。视图层、业务逻辑层进行分离,使得它们之间联系只能通过接口,任何部分内部都不会对其他部分产生影响,从而使Web应用具有可维护性。其五,为软件工程化管理提供了便利。不同层可各司其职,一个层面的应用不同但也有某些相同特征,为软件工程化管理提供了便利。
1.2 MVC设计模式的PHP实现
PHP对象在服务器端不能跨页面存在,所有PHP实际上是没有办法实现传统的MVC架构的,其问题主要在模型上得到体现,如在Java中,数据模型是独立的,不同于业务逻辑、表现逻辑等,它可以在服务器端跨页面存在,JavaBean 就是在这个方面发挥作用[6]。PHP进程在内存中不能长期存在,只能在PHP页面刚刚执行时创建,页面执行结束,则该进程已经结束,基于这种情况,模型不能进行直接实现。
因PHP语言跨页面无法存在,PHP开发框架中使用被动MVC更为适合。在被动MVC模式上,模型身处MVC结构下却不知。也就是说模型是一个普通的ο螅和MVC中的其他部分是没有关联的。这样的话,模型就不用再跨页面存在,改变了使用MVC导致的效率低下现象。
被动MVC模式和传统意义上的主动MVC模式不同,模型是一个简单的独立的对象,因而自身的改变不能传达给视图;视图也无法对模型的更新作出订阅及监视等。视图只能够对控制器传送的数据进行使用或者在得到控制器通知之后再去模型进行最新数据的提取。所以被动MVC模式下,控制器还要把模型更新之后的数据传送给视图,因而在设计上相较于主动MVC更加困难。
2 基于MVC设计模式的开发框架建设与改进
2.1 框架入口设计
传统的Web应用程序中,一般是以页面或者文件为基础的,接入模式一般采取多点接入。这种接入模式可以让用户对系统的文件进行直接访问,并且这些文件可以对用户的请求进行处理并把这些处理的结果反应给用户[7]。一个系统请求入口就有很多。这种接入方式给用户显示的接口非常多,容易带来安全隐患,对全局的处理、优化等起了不利影响。
在MVC设计模式上实现的THINKPHP框架,可以实现传统的多点接入模式,同样也可以进行配置,设置成为单点接入模式。
单点接入模式把Web应用应用程序的全部请求都集中到一个脚本文件即所有的HTTP请求都由入口文件统一进行接受。用户和系统进行交互的入口只有这一个。这种接入模式具有许多优点,其一,方便全局处理,如对数据进行安全监测等。其二,可以使程序结构更加清晰,方便进行管理。入口进行集中控制,程序人员只需要负责开发自己的模块就可以,们不需要对程序运行进行协调。其三,保证安全,采用单点入口模式,只开放需要开放的模块,模块的访问地址都是同一个php文件,用户难以辨别,可以保证系统的安全性。另外,单点接入也使系统的一些耦合缺陷不对用户进行开放。相对于多点接入模式来讲,多点模式采用不同的php文件访问web,URL相对简单整洁,但是不方便同一控制,即便可以使用公用配置文件,倘若项目太大,公用配置也不是好的解决方案。
2.2 控制器设计
在MVC设计模式中,控制器主要作用是负责接受用户输入的数据并调用模型和视图功能去完成用户提出的需求。当用户通过web页面中的超链接和发送HTML表单时,控制器本身不做任何处理,也不会输出任何东西。它只接受请求并决定调用哪个模型构件去处理请求,然后决定用哪个视图来显示模型处理返回的结果[8]。
THINKPHP的控制器层由核心控制器和业务控制器组成,核心控制器由系统内部的App类完成,负责应用(包括模块和操作)的调度控制,包括HTTP请求拦截和转发、加载配置等;业务控制器则由用户定义的Action类或者其他控制器类完成。关键代码如下:
…
if(defined('GROUP_NAME')){
if(is_file(CONF_PATH.GROUP_NAME.'/config.php'))
C(include CONF_PATH.GROUP_NAME.'/config.php');// 加载分组配置文件
if(is_file(COMMON_PATH.GROUP_NAME.'/function.php'))
include COMMON_PATH.GROUP_NAME.'/function.php';// 加载分组函数文件
}
…
业务控制器把客户请求和业务逻辑分开,业务控制器是由用户自定义的Action.php文件来实现的,业务控制器全部由Action类派生而来,继承了所有Action类的方法,把数据传送给视图的抽象方法是$this->display。关键代码如下:
…
class Abstract extends Action {
public function index(){
$this->display();
}
}
…
2.3 数据操作
PHP支持的数据库众多,典型的数据库就是 MySql,对于接口支持不具有统一性[9]。
THINKPHP框架对数据库增删改操作进行了封装,简化了数据库操作,使得开发人员不需要学习SQL语句的相关语法,只需使用GetLastSql()指令将需要操作的SQL语句输出到浏览器调整即可。开发人员可以有更多的精力用在系统业务逻辑上,不再考虑SQL的语法。进行简单封装还降低的程序的书写错误,降低了调试出错概率。
2.4 视图技术
在THINKPHP中,利用视图模板技术把数据层、HTML表示层代码进行分离。Web服务器接收URL请求之后,首先需要确认的是不是第一次对URL进行请求,第一次请求的URL,首先对模板进行调用,判断模版主题,然后再由控制器代码等进行编译,最后用户视图生成数据并输出;不是第一次则在已具有的用户视图上进行直接定位,也要判断模版主题,这种请求节省解析以及读取的时间。框架会使系统伪静态化,考虑使用rewrite筛选器完成。加快了程序的运行速度,提高了效率。关键代码如下:
function isMobile() {
// 如果有HTTP_X_WAP_PROFILE则一定是移动设备
if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])){
return true;
}
return false;
}
$info=isMobile();
if($info){ $theme = 'phone'; //手C模板
}else{$theme = 'default'; //默认模板
}
3 结语
关键词:Spring MVC框架;Web登录系统;B/S架构;session对象
1 概述
随着世界经济的繁荣和科技的迅猛发展,信息化的程度越来越高,各种软件相继出现。大批量种类繁多的软件虽然提高了信息处理的效率,但是安全方面的隐患也日益突出。用户想要进入到不同的应用软件和服务系统时都必须进行登录认证,随之而来的遗忘密码、黑客攻击、密码泄露等问题,都将严重干扰到业务运作。在这种情况下,一种安全可靠的用户登录模块就显得必不可少。
基于这种情况,该文研究了如何利用Spring MVC框架开发一款安全、灵活的Web登录模块。系统的任何用户操作界面都可以提供登录入口,提示用户进行登录,通过认证后,合法用户就可以使用他相应的权限功能。
2 Spring MVC框架概述
Spring是分层的Java SE/EE应用一站式的轻量级开源框架,是为了解决企业应用程序开发复杂性而创建的。Spring框架提供了构建Web应用程序的全功能 MVC 模块。在Spring的MVC中,支持各种视图技术,例如JSP、Velocity、Tiles等。Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
Spring MVC的角色划分非常清晰,各组件的功能单一,很好地达到了高内聚低耦合的效果。Spring MVC相当灵活,且可以扩展,其MVC框架是围绕 DispatcherServlet这个核心展开的。核心控制器的作用就是截获请求,并将其分发到相应的业务控制器中,由业务控制器调用业务处理方法处理业务逻辑,返回一个模型和视图对象,核心控制器再根据此对象找到视图显示出处理结果。
3 登录模块的设计与实现
本登录模块采用B/S的三层结构模式,分为服务器、用户和数据库三个部分。客户端与服务器之间采用HTTP协议进行通信,Web服务器采用Tomcat6.0,数据库服务器采用Oracle10.0.2。在用户登录模块的开发过程中,提供对身份认证、权限分配等有效的安全策略,来实现用户的验证与登录,在没有得到系统授权的前提下是无权对文档进行浏览和管理的。
3.1 总体设计
用户登录模块按照不同的人员职责,提供不同的登录界面,具体包括系统管理员、管理员、游客等登录界面。有游客,管理员,身份证,电话号码+密码等多种登录方式。
登录模块采用基于角色的身份认证技术,根据不同的用户角色,提供不同的登录选项,分配不同的使用权限。根据实际情况定义了三种角色:超级管理员、管理员、注册用户,通过登录界面确认用户的身份,再根据不同的用户类型确定其相应的操作权限。
其中,超级管理员具有对角色、权限、菜单等进行增删改查操作以及角色的赋权。管理员具有对用户账号管理,信息的修改、统计等处理权限。注册用户具有修改个人资料,信息浏览等权限。
3.2 数据库配置
public UserInfo getUserByUserName(String userName){
UserInfo userInfo=null;
try{
userInfo=(UserInfo)
getSqlMapClientTemplate().queryForObject("USERINFO.getUserByUserName", userName);
}catch(Exception e){
logger.error(e);}
return userInfo;}
3.3登录模块的实现
本模块登录时没有区分用户角色,当进入系统后根据角色权限加载菜单项。用户通过输入用户名和密码,然后单击登陆按钮实现以上信息的提交并验证,若正确无误进入系统。
3.3.1错误锁定
登陆模块根据用户身份进入系统,显示拥有权限的操作菜单。如果用户不存在,则找不到数据;如果用户存在,密码错误,同样找不到数据,均提示用户名密码错误;如果用户名和密码同时存在,则获取用户信息,并进入相应的界面。为系统安全考虑,若用户连续而且超过三次输入密码错误,则需要输入验证码。errorTime为输入错误次数,当验证码输入为空,或输入错误,就返回-1,此时对该账号锁定, 登录失败,必须经过超级管理员解锁才能重新使用。部分代码分析如下:
if(errorTime>=3){
if(entryVlidateCode==null||(!entryVlidateCode.equals(realValidateCode))){
map.put("errorMsg","验证码错误");
map.put("userInfo",null);
map.put("errorCode",-1);
return map;
}}
3.3.2在线提示
用户在登录时,会创建一个session,用于保存用户信息。如果在线用户列表中查找到该用户已经在线,同时又在其他机器登录,那么首先提示用户已经在线,然后给出选择挤下或者取消登录。如果挤下,那么被挤机器就无法继续前后台的数据交互,自动退出,登录失败。也就是限制用户重复登录,每个时刻只允许在一台机器上登录。
先从ServletContext中取出存放用户登录的session相关信息,检查这个列表,若已经存在相同的登录信息,则说明用户之前已经登录过,移除前面一条记录。再把此次登录的信息加入到ServletContext中。监听实现SessionListener类,当session失效的时候,从ServletContext中移除相应记录。过滤所有页面,sesison失效后转向登录页面。但是要实现用户二次登录后强制先前的登录失效,需要在这里控制。登录时存入的是session值和session ID,用户二次登录时移除了前次记录,存入的session值是相同的,但是ID却不同。 当第一次登录页面请求的时候,在这里检查ServletContext中是否存在当前的session值与ID,如果没有就销毁这个session。
3.3.3非法退出
对于WEB系统来说,均遵循HTTP协议的请求/应答模型。所以网站本身是不能保存数据的,用户正确登录后,系统更改当前用户的状态为在线。如果用户在使用系统时,不通过退出按钮来执行退出操作,而是非法退出,包括网络断线、系统瘫痪、突然断电等情况。这些都使系统没有给用户记录一个退出系统的操作机会,这种情况下用户的在线状态会一直保留,从而影响下次登录。因此,系统应该设置一个定时器,定时清理并且还原用户的初始状态。
当用户以登陆身份请求服务器资源时,记录用户的最后活跃时间。接着拟定一个失效时间,假设某个用户的最后活跃时间和当前时间的差值大于这个失效时间,也就是说该用户这一段时间都没有和服务器交互了,那么就认为该用户已下线,否则认为他是在线的。
3.3.4超时管理
Session对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。应用session对象时要注意它的生命周期,当用户首次访问时将产生一个新的会话,从用户打开网站生成,关闭浏览器删除,以后服务器就会记住这个会话状态,在这一段时间内,用户都可以访问到会话对象中保存的信息。当会话生命周期超时,或者服务器端强制使会话失效时,这个session就不能使用了,需要用户重新登录。
通过setMaxInactiveInterval()方法可以设置Session的生命周期,通过getMaxInactiveInterval()方法可获得Session的生命周期,如果超过这个时间则失效。
4 结束语
信息的规范化、高效化管理在很大程度上体现了一个组织的工作效率,而登陆功能在其中起到了关键性作用,同时也为系统提供了安全性保障。该文对Web登录模块进行了分析,使用Spring MVC框架进行设计,提出了解决方案,实现了系统用户的登录、出错处理、超时检查等功能,使系统的重用性和扩展性更好,用户界面简洁统一,功能灵活,提高了系统的易用性、安全性及稳定性。
参考文献 :
[1] 刘震宇,肖武魁.基于J2EE框架与ExtJS的Web系统登录设计[J].中南林业科技大学学报,2010(8).
[2] 张瑞青,李铁柱.基于SpringMVC的用户登录系统的设计与实现[J].科技信息,2012(10).
关键词:评教系统;LINQ;UML;MVC
中图分类号:TP311 文献标识码:A文章编号:1007-9599 (2011) 12-0000-01
Online Teaching Evaluation System Design and Implementation 3.5 MVC Framework
Chen Liang
(Changsha Normal College,Changsha410100,China)
Abstract:In this paper,**College for example,in-depth analysis of the school's teaching evaluation system status and system requirements,the use of software systems development ideas and methods for the evaluation of teaching overall system analysis and detailed design.Platform using Visual Studio 2008 features,take B/S architecture,the C# language development,database selection Sql Server 2008.Framework for MVC framework support,let us see more of the highlights,so we use the MVC framework to design the web front system,let the workload in many ways to save,MVC's relatively independent,so that the program the operating mechanism is more clear,structured,low coupling,but also increase the program's scalability.
Keywords:Teaching evaluation system;LINQ;UML;MVC
信息是人们对世界的客观的描述,是人们进行联系与交流的重要途径。伴随着社会信息技术的提高,计算机已被广泛运用到许多的领域,成为推动社会发展的动力,而在软件技术的应用中,软件的开发技术,尤其是应用型软件的开发已经成为重中之重。
一、关于评教系统的概述
对绩效考评,管理学界没有一个统一的定义,但管理学者们从不同的角度,不同的侧重点对这一概念作了不同的描述。评教系统就是学生对教师的能力、工作状况和适应性,对职工的个性、资质、习惯和态度,以及对组织的相对价值进行有组织的、实事求是的评价,包括评价的程序、规范、方法的总和。
二、系统的总体设计
(一)系统的功能。评教系统主要实现的功能有:教研室管理、教师管理、评分角色管理、学年学期管理、考核管理、考核角色管理、指标管理、教员被评角色、教员评分角色、考核评分、一级指标得分浏览、二级指标得分浏览、三级指标得分浏览功能。
(二)系统的架构。主要采用三层架构来设计,三层架构的结构如下图:
1.表示层。表示层提供给用户一个视觉上的界面,通过界面层,用户输入数据、获取数据。2.逻辑层。是表示层和数据层的桥梁,它响应界面层的用户请求,执行任务并从数据层抓取数据,并将必要的数据传送给界面层。3.数据层。数据层定义、维护数据的完整性、安全性,它响应逻辑层的请求,访问数据。这一层通常由大型的数据库服务器实现,如Oracle、Sybase、MS SQl Server等。
(三)教评系统功能模块的实现。由于整个系统的系统功能十分相近,我们不一一展开叙述,此处我们以评分角色管理模块为例来研究具体是如何实现的,其他模块实现方法类似。
1.方法的定义。在评分角色管理模块中有个页面用来实现显示评分体系内所有的指标的功能。这里在后台实际上是调用了一个Get More Topic List(recount,gid)方法,该方法将返回值一个List的链接表类。按照系统的业务设计逻辑,本系统中,方法的调用要经过三层间的逐层调用。最开始是在数据存储层定义方法体,在事物层中定义方法接口,最后在表现层中调用。然而,表现层的每个方法调用,调用后再发送请求到事务接口层。事务接口层对该方法定义了接口,具体如下:
public ListGet More Topic List(int number,int gid)
{return dal.Get More Topic List(number,gid);}
此处return dal.Get More Topic List(number,gid)调用则是去实现接口的方法,完整的方法体则是数据层来实现的。数据层内对相关的SQL语句进行了表达,并返回对应的数据,逐条转换为之前定义的Group Topic Info类,然后形成链表,最后将链表返回。这一连串的跳转,充分展示了方法在这个层次框架中的运行调用机制。
2.页面构造。后台信息发送到前台后,必须充分的展现出来。这里运用到NVelocity模板语言。该语言是嵌入在HTML中的,能直接将后台的变量赋值给前台,使前台可以实现许多复杂的操作。我们以考评系统内的评分角色管理的页面为例,后台得到了一个Group Topic Info的链表,Group Topic Info类型虽然在后台定义过,然而前台还是无法识别,所以需要在后台将Group Topic Info链表转化为一个前台能够进行展现的HTML的应用的类别,必须兼容html语言。然后通过context.Put("infolist",infolist)将链表赋值给前台的NVelocity中的链表。前台接受到数据后,通过一个#foreach($infoin$infolist)循环,将链表的值逐一赋值给展示系统的变量,通过泛型变量依依显示出来。
四、结语
教评系统在教学管理中的重要地位日益突显。当然,一个科学合理的评教系统体系的设计还包括选用科学的设计方法,对指标体系的更新完善等等多个方面,是一个系统的工程。但基于自身知识所限无法一一具体加以说明,以上论述,是个人在学习实践工作中的真实体验,请各位读者斧正。
参考文献:
[1]王娴,谢弛,荣雪,范雯.SNS走向何方――SNS网站运营的现状和未来趋势研究[J].2008
[2]张祖曦.基于SNS社区的人际搜索设计与实现[J].2009
[3]Framework3.5开发技术详解[M].人民邮电出版社,2009
[4]梁冰.JavaScript开发技术大全[M].北京:人民邮电出版社,2008
关键词:PureMVC框架 角色 访问控制
中图分类号:TP393.09 文献标识码:A文章编号:1007-3973 (2010) 07-042-02
1引言
访问控制是指通过某种途径,允许或限制访问能力及其范围的一种方式。近年来,一种新的基于角色的访问控制技术(role-based access control,RBAC)正逐渐成为信息安全领域内的研究热点。目前已提出并得到较广泛认可的模型是美国Sandhu 教授等人的RBAC96 模型。
RBAC 的基本思想是将角色作为用户与权限联系的中间桥梁,用户通过被授予一定的角色而获得相应权限,从而大大简化权限管理。
本文针对一个合作共建系统的权限管理,基于PureMVC框架进行了设计和实现。
2PureMVC框架
PureMVC是在基于模型、视图和控制器MVC模式建立的一个轻量级的应用框架,这种开源框架是免费的,是一个定位于设计高性能RIA客户端的基于模式的框架。
PureMVC是一个定位于高性能RIA客户端的机遇模式的框架,PureMVC框架的核心是广播式的通信机制,接收者只要注册标识与广播消息的标识一致,就会接收消息,由于这种通信机制比较通用,现在已经被移植到大多数流行的开发平台,包括Flash/Flex、PHP、Java、C#等。
2.1PureMVC框架
PureMVC模式通常被分成经典的低耦合三层:Model、View、Controller,这三部分由3个单例模式来管理,三者合称为核心层或核心角色。
(1)整体结构中Facade负责管理整个应用,注册Command并建立Notification映射。Facade是一个单例类,是MVC框架中最核心的功能类,Facade单例负责对3个核心层的初始化,并且能访问各层类的公共方法。其中Mediator、Controller和Proxy均可以发送通知,但Proxy不接受通知,不和Mediator进行直接的交互。
(2)数据层Model指向Proxy的引用。Proxy代码负责操作数据模型,与远程服务通信存取数据,是真正处理数据的地方,视图层展现或提交的数据都回到Proxy处理,处理后的结果通知视图层的Mediator,然后Mediator决定是否更改用户界面。
(3)视图层View负责软件展现给终端用户的界面,视图指向Mediator引用,由多个Mediator组成。Mediator通过Controller和Proxy进行通讯,所有行为都是建立在Notification基础上的,一个对象处理完自己的事务后,简单发送通知到外界就可以了,至于谁去处理随后的事情就交给注册了这个通知的对象去处理。
Mediator管理视图组件,负责和控制器的Command或者数据模型的Proxy交互,是操作显示组件(View Components)的控制器,通过事件监听操作视图组件,Mediator对于用户在界面的操作,均发送事件通知其Mediator,由Mediator决定是否发送通知(Notification)给控制器去处理数据或者是获得数据。而Mediator在接受了其他地方发来的通知后,也会管理界面是否做响应的更新。
(4)控制层Controller包括命令类及其映射,负责处理业务逻辑、联系数据层和视图层,由多个Command组成。其中命令类是无状态的,只有需要时才被创建。
2.2PureMVC框架特点
PureMVC的主要目标是分离代码为三个简单、实用、离散的层,即模型(Model)、视图(View)和控制器(Controller),以减少由应用层、类的作用等造成的程序混乱,平衡可维护性与可扩展性之间的关系,对开发者隐藏复杂性,避免平台依赖性。
使用PureMVC框架进行开发具备下列好处:
(1)基于设计模式,支持已经被时间所证明的设计模式,可以部署于任何具备支持面向对象的环境,模式简单易懂。
(2)框架是“即开即用”的,只需要很小的实现需求。
(3)松耦合架构,提供可复用的组件、模型数据对象和服务,包含/订阅风格的通知,建立明确的分离客户端三层编码关系。
(4)面向接口的编程,框架支持子类或实现接口的扩展,对所有的框架类定义接口,所有的类基于可扩展性思想,框架支持将来通过其他类库以分组模式进行扩展,并且与核心包的模式互不依赖。
(5)完备的文档。源代码免费开放,具有完备的源代码文档,概念和统一建模语言(UML)视图。
2.3PureMVC框架的模式和结构
2.3.1MVC模式
MVC模式实现了模型、视图、控制的分离,其框架如图1所示,这种模式使得代码的管理更加有效,更加清晰,也会减少代码的维护量。
图1MVC模式框架图
2.3.2PureMVC结构
PureMVC是一个纯粹的小巧的MVC框架,在PureMVC中,整个框架由3个单例模式来管理,除了3个核心层之外,另外还有一个单例模式类――Facade,它提供了与核心层通信的唯一接口,以简化开发的复杂度。图2 所示为PureMVC的整体框架结构。
图2PureMVC 结构图
3角色访问控制的实现
本文是以多家合作开发的B/S模式的网站为例,采用Adobe公司的Flex开发环境实现了用户角色访问控制功能,根据用户的不同以及角色的差异进行权限控制,主要包括以下几部分:用户管理,角色管理和权限管理。
(1)Facade类的创建。本例中实现了一个的单例模式类RoleFacade类,它继承了Facade类应用单例模式,负责初始化核心层(Model,View和Controller),注册所有Model和View的Command类,并能访问其Public方法。
public class RoleFacade extends Facade
implements IFacade{
//获取RoleFacade的实例
public static function getInstance():
RoleFacade;
//重载基类initializeController方法,初始化控件
override protected function initializeController( ) : void {
//调用子类构造函数
super.initializeController();
//注册控制器
registerCommand(AddRoleCmd);
……
}
}
(2)由于业务逻辑相对简单,本例中通过SimpleCommand实现了ICommand接口,通过execute方法接受一个Inotification实例作为参数,在实际应用中,重写了Notification的引用。以删除用户为例:
DeleteUserCommand
extends SimpleCommand
implements ICommand {
override public function execute( notification:INotification ){
对Notification的引用
//删除用户、角色
userProxy.deleteItem( user );roleProxy.deleteItem( user );
//发送通知
sendNotification(RoleFacade.USER_DELETED );
}
}
(3)数据模型Proxy封装了数据模型,管理对本地数据的访问,实现权限的管理。Proxy类暴露数据模型和实体类给应用程序,通过sendNotification方法,使用一个IFacade接口的单例去广播,使得程序可以被其它地方被复用或重构。
Proxy类的protected属性被初始化用于注册IFacade实例,因此Mediator在主程序初始化Facade实例后被注册。
本例中有两个对应的类,分别是用户和角色。
public class RoleProxy extends Proxy implements IProxy
public class UserProxy extends Proxy implements IProxy
(4)视图层Mediator保存了多个视图组件的引用,通过其自身提供的API管理它们,因为经常和Proxy交互,所以在构造方法中取得Proxy实例的引用并保存在Mediator的属性中,这样避免频繁的获取Proxy实例。
本例中存在两个Mediator,分别是对应角色的RolePanelMediator和对应于用户的UserFormMediator。
roleProxy = facade.retrieveProxy( RoleProxy.NAME ) as RoleProxy;
(5)主入口文件中构建用户界面结构,包括用户列表,角色列表和权限列表,然后建一个UsedFacade类的对象实例进行控制。
import lalo.ApplicationFacade;
private var facade:UsedFacade
= UsedFacade.getInstance();
4结语
框架给应用带来的好处是不言而喻的,PureMVC作为一个轻量级采用通知驱动的框架,实现了松耦合结构。基于角色访问控制原理,本文以一个合作B/S系统为例设计实现了对角色的访问控制,提高了系统安全性,实际应用表明,该系统具有较好的可扩展性和通用性。但是对于角色的控制还没有与数据库的访问控制相结合,下一步的工作将结合数据库访问控制模型围绕角色、权限、数据库三级访问控制展开。
参考文献:
[1]RAVI S S, EDWARD J C, HAL L F. Role-based accesscontrol model[J]. IEEE Computer, 1996, 29(2): 38-47.
Java语言自从推出以来一直是最流行的编程语言,社会上越来越多的开发人员利用Java技术进行软件开发,也出现了越来越多的Java框架,为了提高软件开发的质量和效率,降低软件复杂度,需要选择合理的框架搭建软件架构,并且需要相应的技术进行项目的构建和管理,本文研究适合中小企业软件开发的轻量级的Java软件架构,并采用流行的项目管理工具Maven管理软件开发,以降低软件开发的难度。
1 多种软件架构的比较
1)早期的Java企业级开发采用框架重量级EJB(Enterprise JavaBean)。EJB是定义了一个用于开发基于组件的企业多重应用程序的Java EE标准。因为EJB容器默认为应用提供了EJB规范中的所用功能,以它为架构的应用程序需要消耗大量资源,具有侵入性,所以是一种重量级框架。
比如,EJB启动的时候,需要消耗大量的资源,内存,CPU等。其次还表现在EJB巨大而复杂的规格说明以及代码规范。现在的EJB3.0增加了许多新的规范,例如元数据支持,实体Bean模型访问Bean上下文的新方法和运行时环境等,但是EJB仍然具有过于复杂的特性。
基于重量级框架EJB的软件架构没有很好的灵活性来应对需求的变化,缺乏实用性,所以随着SOA和其它力量的兴起,软件开发也越来越多地选择轻量级的部署平台。
2)常见的轻量级组合框架采用Struts2、Spring和Hibernate设计。Struts2是一个主流的基于MVC模式的Web开发框架,该框架包括三部分:核心的控制器组件、业务控制器和用户实现的业务逻辑组件。
其中,Struts2框架提供了核心控制器,用户实现业务控制层和业务逻辑层,具体实现时业务逻辑层采用面向接口编程;Hibernate是一个基于Java的对象关系映射(ORM)开源框架,对底层的JDBC进行了非常轻量级的封装,开发人员通过它可以使用面向对象的编程思想操作数据库。
使用JDBC的应用都可以用Hibernate替代,并且Hibernate可以取代重量级EJB在Java EE架构中的应用,完成数据持久化操作;Spring是为了降低企业应用开发的复杂性而创建的轻量级Java开源框架。
Spring框架的采用分层架构,分层架构的优点是使用者根据需求选择使用其中的组件,并且可以提供集成的框架。Spring通过核心的控制反转(IoC)和面向切面(AOP)功能,使用简单的JavaBean来完成以前由重量级EJB完成的应用。
Spring的应用不仅限于服务器端,任何的Java应用都可以选择需要的Spring功能模块。所以,Spring是一个分层的一站式轻量级开源框架。
Struts2、Hibernate、Spring组合的轻量级架构如图1所示。
3)目前流行应用Spring MVC完成Web开发。Spring的轻量级和低入侵性使得其应用越来越多,由此发展了Web模块,融合在Spring Web Flow里面,即Spring MVC。
Spring MVC是提供了构建 Web 应用程序的全功能MVC模块。该功能和Spring其他功能一样是一种可插入的MVC架构[1]。Spring MVC轻量级框架侧重于减小开发的复杂度,比较适用于开发中小型企业应用。所以在使用Spring进行Web开发时,越来越多的使用SpringMVC框架取代集成其他MVC开发框架(如Struts2)。
2 轻量级软件架构的搭建
基于了Spring和Hibernate轻量级的特点,采用Spring MVC和hibernate整合完成分层的轻量级软件架构,应用Hibernate的对象持久化功能进行域模型层和DAO(Data Access Object)层的实现,应用Spring MVC定义控制层(Controller)和视图层,应用Spring的对象管理功能管理DAO层、服务层(Service)和控制层的对象,降低软件组件间耦合性。
在进行Spring、Spring MVC和Hibernate轻量级架构搭建时,为使应用耦合度低不依赖其他容器,采用基于简单Java对象的方法,这可以提高软件的开发调试效率。具体搭建该轻量级软件架构需要注意以下几点。
1)导入Spring和Hibernate及其他功能(例如数据库驱动)的支持Jar包。
2)Spring MVC的核心是DispatcherServlet,,这个Servlet充当Spring MVC的前端控制器,必须在web.xml中进行配置。
3)必须定义基于这个servlet名字的XML文件,DispatcherServlet在加载时会从该文件中加载Spring上下文。
4)定义相应功能的处理类和返回视图。
采用的轻量级框架Spring和Hibernate都是基于Java的开源框架,在开源社区中为这些框架提供了成熟的API和许多快速构建工具以及可供参考的开源代码,这更利于软件的快速开发。
3 Maven的应用
在进行轻量级的软件架构开发项目的过程中,还必须有良好的项目管理工具。Maven是一款通过简短的描述信息来管理项目的构建,报告和文档的软件项目管理工具,它的核心是基于项目对象模型(POM)。Maven包含了一个项目对象模型、一组标准集合、一个项目生命周期、一个依赖管理系统和用来运行定义在生命周期阶段中插件目标的逻辑。
应用Maven,可以用一个明确定义的项目对象模型来描述项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。Maven可以让开发人员快速地构建一个项目,有效地解决包管理和项目问题,并且可以与持续集成进行无缝对接。对于大型的系统,采用Maven 作为项目管理工具,可以有效地进行分工协作[2]。
Maven的这种应用无侵入性,本身就是轻量级软件架构的需要。
将Maven应用于基于Spring MVC的轻量级软件架构,可以有效的提高项目开发进度,降低项目复杂度,主要方法为以下几种。
1)为项目定义pom.xml文件,该文件中定义了项目对象模型,是Maven脚本的基础,这个模型定义了项目的各种属性,脚本都是基于该模型工作;此外在对象模型中对所依赖的包有明确的定义,如定义使用哪个版本的包。
2)Maven是基于中央仓库的编译,即把编译所需要的资源放在一个中央仓库里,如jar,tld,pom,等。当编译的时候,Maven会自动在仓库中找到相应的包,如果本地仓库没有,则从设定好的远程仓库中下载到本地。这一切都是自动的,并且用maven编译的项目在的时候只需要源码,小得很,使得项目更加轻量级。
3)Maven还为项目提供了大量的附加脚本降低项目开发的复杂性,例如生成网站、生成文档、源代码参考手册等,利用Maven只需运行相应脚本。
4 结论
良好的软件架构和项目管理工具是软件开发成功的基础,不仅能够降低开发难度,节约开发成本,还能够极大的提高软件的可扩展性和可维护性。基于Spring、Spring MVC和Hibernate搭建的软件架构以控制器、模型和视图(MVC)为基础,对底层JDBC进行对象封装,提供业务模型基础,并应用分层和按需集成方式开发web应用;Maven服务于基于Java平台的项目构建、依赖管理和项目信息管理,来降低系统各个模块之间的耦合度,使得代码的复用性大大提高,可以实现项目的并行开发,进一步提高系统开发的可扩展性及稳定性,降低软件开发难度。
摘 要:本文介绍MVC与三层结构技术的内容和区别,包括MVC框架的结构和三层结构技术的内容,并对两者的主要应用(包括B/S架构下)进行阐述;对两者结合设计软件的应用和性能做了说明和论述。因为MVC与三层结构技术在软件开发(尤其在Web技术下的数据库系统开发)具有的重要作用和地位,对其研究具有重要的现实意义。
关 键 词:MVC ;三层结构技术;软件框架;B/S;Web
1.MVC与三层结构技术简介
MVC是一种软件,是一种软件框架[1]。软件框架是对通用功能操作进行抽象的软件,这些抽象的功能操作的代码可以根据应用程序的功能要求有选择的改变,并复用框架代码,进而形成特定的应用软件。
就是把一些通用的功能,通过开发平台以代码和架构的形式表示出来,开发者通过框架提供的接口进行功能开发,可以复写框架代码,而不必从开始编写。框架提供了一些软件功能的默认实现,在特定的开发平台下,就是说开发平台已经代替开发者实现了一些通用功能并提供了相应的代码,开发者只需重写或添加功能代码。注意:框架内部代码不可重写;应用程序流程必须在框架内部。
三层结构技术[2]是一种设计架构模式,是一种软件的设计思想。可以把软件设计分为表示层、中间层和数据层,已利于软件功能的设计和实现,称为三层结构技术。
框架给出了应用程序的体系结构,设计模式给出了具体设计的解决方案;设计模式可用不同语言和不同方式来实现,而框架则是开发平台给出的设计和代码的混合体;设计模式与语言无关的,具体设计受制于开发平台框架的具体实现环境。利用框架开发软件应体现设计模式的基本思想,软件设计模式思想的实现要选择合适的软件框架并受制于框架。
2.MVC结构
2.1组成
由Servlet(Controller)、JSP(View)、JavaBean(Model)三部分构成。Model是负责保持状态、数据的应用组件,通常这个状态持久于数据库之中。View是负责用户界面的组件(UI),通常这个UI是使用Model模型数据来创建的。Controller用来处理用户交互,控制器行为(Action)用来完成用户发过来的每一个请求,操作Model(模型)最终会选择用哪个View(视图)来显示UI的组件。
2.2特点
视图、控制和模型分离,近一步提高了复用程度,三者可以独立变化,降低了耦合性并进一步提高了模块的复用性;合作效率得到充分发挥,开发成员的分工界面更加清晰;当出现问题时更容易锁定问题。
2.3结构
3.三层结构技术[3]
所谓三层体系结构,就基于Web的数据库开发而言就是在客户端与数据库之间加入了一个中间层,也叫组件层。
而软件设计的一般三层体系结构[4]分为:
(1)表现层(UI):就是展现给用户的界面,即用户在使用一个系统的时候展现在操作员或用户的所见与所得及其过程。
(2)业务逻辑层(BLL):针对具体问题的操作,对数据库系统而言也可以说是对数据层的操作,对数据业务逻辑处理和一些事务办理。
(3)数据访问层(DAL):该层所做事务是对数据库直接操作,针对存储数据进行数据的增添、删除、修改、更新、查找等功能实现。 [ ]
完善的三层结构的要求是:修改表现层而不用修改逻辑层,修改逻辑层而不用修改数据层。这样就为软件设计提供了架构设计思想,利于代码的模块设计和功能的设计实现,修改和重组。
4.三层结构在B/S上的应用
在Browser/Server三层体系结构下,应用软件三层结构设计的软件系统被分割为表示层(Presentation)、功能层(Business Logic)、数据层(Data Service)三个相对独立的单元。
第一层:表示层,Web浏览器上的软件设计。
表示层包含系统的显示逻辑,位于客户端。它的任务是由Web浏览器向网络上的某一Web服务器提出服务请求,Web服务器对用户身份进行验证后用HTTP协议把所需的主页传送给客户端,客户机接受传来的主页文件,并把它显示在Web浏览器上,相应数据由此被获得和显示。
第二层:功能层,具有应用程序扩展功能的Web服务器上的软件设计,实现数据处理和事务处理。
功能层包含系统的事务处理逻辑,位于Web服务器端。它的任务是接受用户的请求,首先需要执行相应的扩展应用程序与数据库服务器进行连接,通过SQL等方式向数据库服务器提出数据处理申请,而后等数据库服务器将数据处理和事务处理的结果提交给Web服务器,再由Web服务器传送回客户端。
第三层:数据层,数据库服务器上的软件设计,主要是对数据库直接进行数据处理。
数据层含系统的数据处理逻辑,位于数据库服务器端。其任务是接受Web服务器对数据库数据操纵的请求,实现对数据库查询、修改、更新等功能,把运行结果和数据提交给Web服务器。
5.主要的MVC[5]
(1)Struts:Struts是Apache软件基金下Takarta项目的一部分。Struts框架的主要架构设计和开发者是Craig R.McClanahan。Struts 是Java Web MVC框架中不争的王者。
(2)Spring:Spring实际上是Expert One-on-One J2EE Design and Development 一书中所阐述的设计思想的具体实现。
(3)Hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
(4).NET:.NET MVC是微软官方提供的以MVC模式为基础的.NET Web应用程序 (Web Application)框架。
6.MVC与三层结构技术应用
传统的软件设计代码繁琐,代码模块间耦合性高,可重用性差,开发更简洁地设计一款代码整洁,耦合性低,可重用性更高,可扩展性更好的软件,MVC与三层结构技术被采用。
目前大多数信息化系统都是面向Internet开发与部署的,其优点是用户易于操作、不受操作平台限制、不受地域性制约,因此在各行各业得到广泛的应用。而构建这些系统的技术主要有J2EE、.NET,表现技术主要有JSP、ASP.NET、PHP以及AJAX,它们多以表现层、业务层、数据持久层层次结构作为构建思想。J2EE的优点主要表现在开源、安全性高、跨平台性强、可移植性好、跨语言程度高,缺点是配置复杂;.NET的优点主要表现在集成性好、简化应用、支持Web服务、易于学习,缺点是操作平台单一、局限性较强。本文采用.NET框架作为教学质量评价系统的平台支持技术,并使用ASP.NET MVC技术作为系统的主要开发技术;其根据MVC的特点分析教学质量评价系统,将MVC的模型-视图-控制可分离的优点应用到教学质量评价系统中,并用AJAX技术应用到表现层实现页面实时异步交换数据,从而提高系统的可重用性、通用性和可扩展性。
二、关键技术分析
.NET框架主要包括公共语言运行库和.NET框架类库,支持生成和运行下一代应用程序和 XML Web Services 的内部Windows组件,用于提供应用程序开发的基础设施。而ASP.NET是一种基于Web开发的技术,它支持的语言包括微软所提供的所有语言,其中C#.NET最常用于开发基于Web的应用程序。ASP.NET MVC 框架提供用于创建Web应用程序的 ASP.NET Web窗体模式的替代模式;它是一个可测试性非常高的轻型演示框架,并集成了ASP.NET的功能;MVC框架在System.Web.Mvc程序集中定义。ASP.NET AJAX是JavaScript、CSS、DOM、XMLHttpRequest四种技术的集合体,并且AJAX 应用程序使用 XMLHttpRequest 对象绕过浏览器并与 Web 服务器及任何托管 HTTP 端点建立直接通信,通过JavaScript实现页面实时异步处理数据;在System.Web.Mvc.Ajax程序集中进行了定义。ADO.NET不是简单地对ADO扩展,它提供了对关系数据、XML 和应用程序数据的访问,对Microsoft SQL Server和XML等数据源以及通过OLE DB和XML公开的数据源提供一致的访问;并通过ADO.NET DataSet对象处理和缓存数据。
1.ASP.NET MVC
可以认为ASP.NET MVC是ASP.NET和MVC框架的结合体,且互不包含。
(1)ASP.NET与MVC概述
ASP.NET是一种统一的Web开发模型,可用公共语言运行库(CLR)兼容的任何语言来编写应用程序的代码,这些语言包括Microsoft Visual Basic、C#、JScript .NET 和 J#;主要提供了页和控件框架、ASP.NET 编译器、安全基础结构、状态管理功能、应用程序配置、运行状况监视和性能功能、调试支持、XML Web services 框架、可扩展的宿主环境、应用程序生命周期管理和可扩展的设计器环境等功能。其ASP.NET页面周期如图1所示。
MVC包括模型、视图和控制三个组件,其中模型对象是实现应用程序数据域逻辑的应用程序部件,是检索模型状态并将其存储在数据库中;并且在小型应用程序中,模型通常是概念上的分离,而不是实际分离。视图是显示应用程序用户界面(UI)的组件。控制器是处理用户交互、使用模型并最终选择要呈现的视图来显示 UI 的组件;在 MVC 应用程序中,视图仅显示信息;控制器则用于处理和响应用户输入和交互,并广泛支持 ASP.NET 路由。ASP.NET MVC结构如图2所示。
(2)ASP.NET MVC功能
主要包括以下功能,处理序列如图3。
①应用程序任务(输入逻辑、业务逻辑和 UI 逻辑)的分离、可测试性和测试驱动的开发 (TDD)。MVC 框架中的所有核心协定都基于接口并且可使用 mock 对象进行测试,mock 对象是模仿应用程序中实际对象行为的模拟对象。
②可扩展和可插入的框架。在开发时,可以插入自己的视图引擎、URL 路由策略、操作方法参数序列化以及其他组件;它还支持使用依赖项注入(DI)和控制反转(IOC)容器模型。
③广泛支持 ASP.NET 路由。ASP.NET 路由是一个功能强大的 URL 映射组件,它允许生成具有易于理解和可搜索的 URL 的应用程序。URL 未必包含文件扩展名,并且旨在支持非常适合搜索引擎优化(SEO)和具象状态传输(REST)寻址的 URL 命名模式。
④支持将现有 ASP.NET 页面(.aspx文件)、用户控件(.ascx文件)和母版页(.master 文件)标记文件中的标记用作视图模板,并支持现有 ASP.NET的功能。
(3)ASP.NET与ASP.NET MVC
具体比较如表1和图4所示。
2.ASP.NET AJAX
ASP.NET AJAX 统一了编程接口和数据类型,并使用JavaScript Object Notation(JSON)层可确保到达客户端的DTO制作从服务器发出的数据的镜像。在客户端使用ASP.NET AJAX与远程服务进行交互,将实时数据返回到浏览器中,并提供了与服务器端服务同名的JavaScript 对象和大量静态方法,如Update 方法最终会提取 JavaScript文档类型定义(DTD)数组并将其传递到最终负责更新用户界面的回调函数中;同时,标记生成器基于文档对象模型(DOM)中一个或多个 HTML 模板的引用以及下载的数据返回 HTML 字符串,最后回调在页面的 DOM 中插入该字符串;并通过DOM将DataView控件中的数据呈现在页面。如图5是ASP.NET AJAX缓存和运行机制。在定义客户端主要以浏览器端模板模式(BST)运行,它的核心是JavaScript MarkupBuilder 类。
3.ADO.NET
ADO.NET 通过数据处理将数据访问分解为多个可以单独使用或一前一后使用的不连续组件。ADO.NET 包含用于连接到数据库、执行命令和检索结果的.NET Framework 数据提供程序,如图6所示。ADO.NET 类在System.Data.dllt中,如使用SQL Server的方法为using System.Data.SqlClient;并且与System.Xml.dll 中的 XML 类集成;具有断开式数据结构,能够与 XML 紧密集成,能够组合来自多个不同数据源的数据的通用数据表示形式,以及与数据库交互而优化的功能。ADO.NET实体框架使开发人员可以编写更少的数据访问代码,减少维护,将数据结构抽象化为更易于开展业务的方式,并且有利于数据的持久性;通过EntityClient可与概念层的实体数据模型(EDM)交互,如图7所示。
三、基于ASP.NET MVC的教学质量评价系统分析设计
教学质量评价系统主要以教师-学生(主体-客体)间的“教学用”的角度来分析需求,因此操作群体包括教师和学生,评价基础是教师与学生间的“教学用”的关系。在实现系统之前已经建立了评价教师和学生的指标体系,这两个指标体系是围绕“教学用”展开的。其中教师指标主要从教学效果、教学方法、课堂气氛、备课情况、课堂纪律、知识灵活程度、知识广度、吸引力等角度建立的,学生的指标主要从自觉情况、学习积极性、听课状态、与教师互动频率、学习成绩、技能与比赛、自学能力、遵纪守法、到课率、参与活动的态度等角度建立的。这就形成了教师给学生打分,学生给教师打分,但这与现阶段各学校采用的评课是有区别的,主要表现在:(1)教师与学生的指标是相互制约和联系的;(2)注重主体与客体的关系;(3)强调“教学用”在评价中的作用,从而做到教-学-用链式关系;(4)将评价的结果及时反馈给领导,以便领导有效调整管理策略;(5)提高了领导、教师、学生的督导机制;(6)实现了“教学用”间的跟踪机制。因此,基于ASP.NET MVC评价系统的实现就以两大指标体系为系统主要需求展开分析设计,且采用层次分析法(AHP)计算每一个指标的权重,这样降低了主观因素,实现了科学评价,本系统是通过AHP计算软件先将权重结果代入到系统中,再计算教学质量结果。
1.教学质量评价系统分析设计
用表现层、业务层和数据持久层作为系统的构建思想,并将AJAX和MVC融合到各层中;通过各指标的评分作为教学质量评价的基础,其计算方法为:
针对一个教师有i门课程,若每一门课程有mi个学生打分,每一门课程的权重分wi,分数为Si,则该教师每一门课程和总得分分别计算如下:
针对一个学生选修了j门课程,相应有Teaj个教师为他们打分,每一个教师打的分数为Sj,则该学生平均分Ava为:
教学质量评价功能和流程分别如图8、图9所示。
2.关键代码
(1)创建控制器:
sing System;
using System.Web;
using System.Web.Mvc;
namespace TeacherMVC.Controllers
{
public class TeacherController : Controller//创建一个教师类
{
[ControllerAction]
public void Index()
{
...
}
}
}
(2)创建视图:
namespace TeacherFromMVC.Views.Record//创建一个教师视图
{
public partial class HiThere : ViewPage
{
...
}
}
...
[ControllerAction]
public void EditPage(string pageName)//实现视图翻页
{
Space space = new Space(Repository);
Page page = space.GetPage(pageName);
RenderView("editpage",
new PageViewData {
Name = pageName,
Page = page });
}
(3)创建模型:
public class TeacherGradeRepository
{
//创建模型
TeachermarksModelDataContext db = new TeachermarksModelDataContext();
// 请求方法
public IQueryable FindAllTeachermarks() { ... }
public IQueryable FindAllPublicBookmarks() { ... }
public IQueryable FindTeachermarksByUser(string teacher){ ... }
public IQueryable FindPublicTeachermarksByUser(string teacher) { ... }
public IQueryable FindTeachermarksByTag(string tag) { ... }
public Teachermark FindTeachermarkById(int id) { ... }
public IQueryable FindTeacher(){ ... }
public IQueryable FindTags() { ... }
public Tag FindTag(string tag) { ... }
// insert/delete methods
public void AddTeachermark(Teachermark bm) { ... }
...
// persistence
public void Save() { ... }
}
(4)创建路由:
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // 路由名
"{controller}/{action}/{id}",// URL参数
new { controller="Home", // 参数默认值
action="Index", id="" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
(5)声明AJAX的方法:
{{description}}
…
function pageLoad()
{
if (builder === null)
{
builder = new Samples.MarkupBuilder();
builder.loadHeader($get("header"));
builder.loadFooter($get("footer"));
builder.loadItemTemplate($get("item"));
}
}
…
关键词:MVC架构;IOC架构;ORM架构;技术实现
中图分类号:TP301文献标识码:A文章编号:1672-7800(2012)003-0019-03
基金项目:东莞市高等院校科研机构科技计划项目(2011108101012)
作者简介:李淑飞(1974-),女,湖南永兴人,硕士,东莞职业技术学院讲师,研究方向为计算机应用技术。
0引言
近年来,在J2EE世界,开源框架不断涌现,像Struts、Spring、Hibernate等经典成熟的开源框架,在其框架上进行二次开发将极大地减少软件开发成本,提高软件的生产效率,同时也规范了部分软件开发层次,大大减轻了开发人员的负担。由于开源框架都是免费和开放源码的,开发者如何有效地驾驭这些框架,如何将不同层上的框架整合在一起,把开发人员从繁杂的底层编码中解脱出来,使其更专注于应用的业务,都是值得探讨的问题。为此,笔者对开源框架核心思想的关键技术进行了研究,并给出了关键技术的实现方法。
1开源框架的核心思想
在J2EE开源框架中, Struts、Spring、Hibernate等开源框架代表了J2EE应用在结构上的3个层次,即应用系统前端、业务规则核心应用、数据访问及存储对象映射。Struts是在Web版应用程序时产生的,即在应用前端将视图(View)、控制器(Controller)、数据模型(Model)分离开来,其核心思想是MVC架构。Spring是一个轻量级的开源框架,以控制反转(IOC)原则和面向方面编程(AOP)思想为基础,提供管理对象服务,其核心思想是控制反转(IOC)或者说是依赖注入(DI),其核心概念是Bean Factory,它能够很方便地配置、装配JavaBean和普通的Java 对象,通过IOC 容器和依赖注入技术无缝的将各个协同工作的业务逻辑对象整合在一起。Hibernate是Java应用中对象与关系型数据库的关系持久化层的解决方案,核心思想是ORM,负责Java对象和关系数据之间的映射,封装了底层JDBC访问数据库细节。
2开源框架的关键技术及其应用模型
开源框架将Web应用程序划分成三层架构:表现层、业务层和数据层,各层的关键技术如下:
(1)表现层关键技术。在MVC前端部分,需遵循MVC架构,构造出其数据模型(M)、视图(V)、控制器(C)。模型(M)根据业务规则封装数据后的应用程序状态,视图(V)用来组织表现模型(M)内容,在MVC的前端简单模型中,视图(V)通过外界输入请求给控制器(C),控制器(C)根据视图(V)的输入内容,将其转换成程序相应行为,去更新模型(M),再选择相应视图(V)展现给用户。
(2)业务层关键技术。该层关键技术是IOC业务关注点的IOC控制反转、解耦及非侵入性,Spring 通过JavaBean 模型提供基于IoC 容器的BeanFactory 和基于AOP 框架的JavaBean 组件,不需要维护组件之间的依赖关系,只要在配置文件WebApplicationContext.xml 中设置属性,Spring 容器将自动依赖注入到相关的组件,完成业务方法层组件的配置与加载。在图1中的IOC简单模型中,将业务关注点(组件)分离,可以达到将关注点解耦的目的,同时减少了业务关注点(组件)相互的侵入性和直接依赖。将关注点(组件)及关注点(组件)之间依赖关系的实现交给IOC容器完成(而不是交给应用程序内部),IOC容器在运行期间将依赖关系动态的注入关注点(组件),即IOC控制反转。
(3)数据持久层关键技术。该层关键技术是ORM部分,需解决数据库的无关性和实体对象的持久性。图2中的ORM中数据存取层实现了数据库访问无关性,通过封装JDBC对数据库的访问细节,实现了对主流数据库的统一访问接口,这些接口是建立在图2中JDBC封装数据库访问无关的基础之上的。对象映射关系持久化是Java实体对象与关系数据库的映射,通过持久化将数据库中表的某条记录映射成Java应用中的某个实体对象,或者将Java应用中的某个实体对象映射成数据库中表的某条记录,对象关系映射文件描述了映射关系,而持久化能让开发者以面向对象的方式操作数据库。DAO组件实现了对业务数据访问方法,并通过统一对外访问层向用户提供统一的访问方法和服务。
3开源框架关键技术的实现
在Web应用系统开发中,将MVC前端简单模型(表现层)、IOC简单模型(业务层)、ORM简单模型(数据持久层)、关系数据库整合起来,构成开源框架的架构层次模型。MVC框架中的控制器响应来自客户端的数据,并组装相应数据,然后请求或更新相应的业务模型,该业务模型继而查找IOC框架中的业务组件,并请求IOC上的业务服务,业务服务调用ORM框架DAO类方法,从而使ORM与关系数据库数据进行交互。完成对数据的访问后,将响应结果集合返回给IOC框架的业务服务,业务服务响应给MVC的控制器,控制器再根据业务模型,选择合适的视图装载数据,最终响应给客户端。
3.1MVC架构的关键技术实现
开源框架的MVC框架中的Controller控制器用来接收浏览器的请求,更新Model模型状态,以及选择合适的View视图,是组织协调框架统一行动的控制枢纽。Controller控制器是以servlet实现的命令设计模式,它是MVC的核心,mvcBean.xml文件(配置了模型及视图的选择)用来配置该命令模式,描述行为和流程。Controller控制器分为统一处理所有客户端请求、统一处理所有跳转和映射,统一处理所有客户端请求由ControllerResult类实现,统一处理所有跳转由ControllerForword类实现,而处理映射mvcBean.xml文件由InitConfig类实现。MVC框架实现流程见图3。
3.2IOC架构的关键技术实现
开源框架的IOC框架中的核心就是业务组件及管理,业务组件及业务对象之间的依赖关系用配置文件iocBean.xml来管理,也就是依赖注入机制或者说是控制反转(将关系交给IOC容器管理而不是应用程序)。IOC容器用来管理配置文件中业务对象间的依赖关系,并在Web容器启动时或者应用程序需要时注入。IOC容器是在Web容器中开辟了一块属于某个业务应用的特别空间。在Web容器启动时,通过启动配置监听器来加载IOC容器,让IOC容器根据配置文件加载或初始化业务组件并维护业务对象间的依赖关系,使用IocContext类来为这些加载的业务组件提供上下文环境,ClassInstanceFactory类来生成业务对象,让util类包来解析业务对象间的依赖关系。这样就能通过Web容器上下文WebApplicationContext环境就能访问IOC容器上下文IocContext环境,进而访问IOC容器下的能够访问所有内容,包括业务组件及业务对象间的依赖关系。
开源框架中的简单IOC框架部分核心思想的代码实现,包括IOC容器的初始化、依赖关系注入。在IOC容器的初始化代码中,类WebContextListener实现了ServletContextListener接口,它会监听Servlet容器,当Servlet容器启动时它会调用contextInitialized()方法进行相关的初始化工作,applicationContext作为IOC容器通知上下文被唯一一次初始化,包括初始化配置文件iocBean.xml,而后通过applicationContext能够获取到IOC容器所有上下文信息,当Servlet容器关闭的时候,它同样会调用contextDestroyed()方法进行相关的销毁工作,代码如下:
public class WebContextListener implements ServletContextListener {
ApplicationContext applicationContext;
public void contextInitialized(ServletContextEvent servletContextEvent) {
String contextConfigPath = servletContextEvent.getServletContext().getInitParameter("contextBeanPath");
if (contextConfigPath == null) {
applicationContext = new IocContext();
} else {
applicationContext = new IocContext(contextConfigPath);
}
}
public void contextDestroyed(ServletContextEvent servletContextEvent) {
if (applicationContext != null)
applicationContext = null;
}
}
在IOC容器加载业务服务组件部分的核心代码,实现对配置文件iocBean.xml的初始化,并完成业务组件的加载。bean用来描述一个业务组件,而该业务组件有很多属性propertys;使用一个beanPropertyMap的Map类型来描述该业务组件的多个属性,Map中的String类型的key来标识该业务组件的一个属性,并用来区别于该业务组件其他的属性,BeanProperty类型的value来存储该属性对象;BeanProperty类型的name用来描述该实例中使用的变量,ref描述该变量实现的类,其中name的值为IOC容器注入的业务名称,而ref的值即为name的依赖关系,代码如下:
List propertys = bean.selectNodes("property");
Map beanPropertyMap = new HashMap();
if (propertys != null && propertys.size() > 0) {
for (Element property : propertys) {
String name = property.attributeValue("name");
String ref = property.attributeValue("ref");
BeanProperty beanProperty = new BeanProperty();
beanProperty.setName(name);
beanProperty.setRef(ref);
beanPropertyMap.put(name, beanProperty);
}
}
3.3ORM架构的关键技术实现
开源框架的ORM框架中的核心就是对象关系映射,同时包括以封装好的JDBC数据库访问无关性作为基础的数据存取、事务管理。对象关系映射的主要文件有:映射类(*.java)、映射文件(*.xml)以及数据库配置文件(*.xml)。映射类描述数据库表的结构,表中的字段在类中被描述成属性;映射文件描述数据库表和映射类之间的关系,包括映射类和数据库表的对应关系、表字段和类属性类型的对应关系以及表字段和类属性名称的对应关系等;数据库配置文件描述数据库连接时需要的连接信息,比如连接数据库类型信息、登录用户名、登录密码以及连接字符串。
在ORM框架的关键技术实现中,DAOFactory用来根据不同的业务对象产生相关业务DAO实现类,AbstractDAO用来封装DAO实现中的增删改查等共同抽象业务行为,是DAO实现的父类;IDAOModule接口采用Hibernate技术来管理数据存取层和实现实体对象持久化,并被依赖注入到AbstractDAO;DAO实现类则实现了业务数据访问方法,这些方法会调用IDAOModule接口的实现类中的方法来对数据库进行访问,以获取相关业务数据。当业务逻辑层调用ORM框架的数据访问层时,根据业务逻辑DAOFactory选择产生相应的DAO实现类,DAO实现类会选择相应的IDAOModule接口实现对数据库访问并返回相关业务数据。
4结束语
开源MVC框架简单化了Struts框架,不在视图中支持扩展自定义标签,IOC框架简单将这些业务服务组件在web容器启动IOC容器时或者在应用程序需要时初次初始化加载到一个全局Map(IocContext类能访问到的)中,IOC容器只加载一次,简单的提供业务服务组件的访问;ORM框架并不维护模型映射中的对象间关系、关系数据库关系、映射中的策略,只是简单映射Java对象与关系数据模型,通过对表现层、业务层、数据层的整合、重构、改进,降低重新开发框架的成本,更能在极短的时间内完成大量重复而简单的工作任务,提升工作效率,打造企业竞争产品,提升企业品牌。
参考文献:
\[1\]CHUCK CAVANESS.Programming jakarta struts O'Reilly Media,2002(11).
\[2\]刘君强,顾海全,王讯,等.基于开源框架的高质量J2EE应用架构\[J\].计算机工程与设计,2007(1).
\[3\]黄道斌,尹荣章,叶明全,等.基于开源框架的内容管理系统\[J\].电脑知识与技术,2010(4).
\[4\]夏昕,曹晓钢,唐勇.深入浅出Hibernate\[M\].北京:电子工业出版社,2005.
\[5\]孙卫琴.Tomcat与JavaWeb开发技术详解\[M\].北京:电子工业出版社,2004.
\[6\]王福强.Spring揭秘\[M\].北京:人民邮电出版社,2009.
Research and Implementation of Key Technologies of
The Core Idea of Open Source Framework