mvc框架范文

时间:2023-11-04 04:58:45

mvc框架

mvc框架篇1

关键词: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框架设计的可持续发展,要求相关技术人员应致力于架构与代码的研究,为其开发提供便利。

参考文献

[1]张文胜.基于MVCS模式的组件化手机Web前端的研究与应用[J].电子设计工程,2015,23(11):19-20.

mvc框架篇2

(中国矿业大学〈北京〉机电与信息工程学院,中国 北京 100083)

【摘要】一个好的设计模式能够有效地建立系统结构,降低系统复杂度。模型-视图-控制器(MVC)就是一个框架级的设计模式,它可以分离数据访问和数据表现,让开发人员可以开发一个可伸缩性强的、便于扩展的控制器,来维护整个流程。本文在介绍了MVC模式的发展、概念以及实现的基础上,详细介绍了MVC模式在Struts框架中的具体应用。

关键词 MVC模式;Struts框架;应用研究

0引言

MVC模式最早由Trygve Reenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式。并且由于其鲜明特点,广泛受到程序开发人员的青睐。使用MVC模式的目的是实现一种动态的程式设计,使之简化对后续程序的修改和扩展,并且可以重复利用程序的某一部分。而基于MVC模式的Struts框架,可以将问题进行划分,成为一个个的小模块,这样使得问题更容易得到解决,系统结构更加清晰,另外当问题发生变化或者当技术有所改变时,我们可以进行代码重用,这能够极大的提高开发人员的开发效率。所以基于MVC模式的Struts框架非常适合开发大型的复杂系统。本文详细介绍了MVC模式的基本思想,以及Struts框架的体系结构。

1MVC模式概述

1.1MVC架构

MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。模型(Model):就是业务流程/状态的处理以及业务规则的制定。视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Applet。随着应用的复杂性和规模性,界面的处理也变得具有挑战性。控制(Controller)可以理解为从用户接收请求,将模型与视图匹配在一起,完成用户的请求。这实际上是一种模型的变化-传播机制。模型、视图、控制器三者之间的关系和各自的主要功能,如图1所示。

1.2MVC模式的优势与不足

MVC能够被众多的web应用系统作为主流框架,主要原因在于它具有巨大而众多的优势,这主要体现在下面几个方面。

(1)MVC可以让一个正在运行着的模型,同时建立和使用多个视图,并且,MVC中具有一种特殊的机制,那就是内置数据监听机制,依靠观察者模式,这种机制可以监听模型层数据的更新,并且能够同步将视图层的数据进行更新,以此来实现同步响应。

(2)在视图和控制器之间,是相互透明和独立的。这种特点,可以让开发人员根据需要来动态的定制控制器和视图之间的关联关系,以此开发相对复杂的应用系统。同样因为视图和模型之间是相互独立、分别存在的,所以如果在做跨平台的系统移植时,把一个模型单独移植到新的平台进行工作就会相对比较简单。我们仅仅需要在新的平台上将视图重新设计,并且重新运行控制器。

(3)由于MVC是一种思想,是一种潜在框架结构,因此我们可以在此模型的基础上建立客制化的应用框架,以此来满足客户的个性化需求。

虽然MVC具有很多的优点,但是也有一些不足的地方,例如,使得系统结构更加复杂,从而增加了实现的难度。此外,MVC适用于相对规模比较大的系统,如果系统实现的功能结构相对比较简单,那么如果严格遵循MVC模式,反而会使得系统结构复杂度增加,并且还有可能由于进行跟多的更新操作,导致系统运行效率降低。另外,视图与控制器之间的耦合性过强。虽然在理论上,视图与控制器之间是相互分离的,但是在实际的应用中,视图和控制器之间的耦合性还是比较强的。如果视图中没有控制器的话,那么他的应用将会非常有限,反之亦然。这种强耦合阻碍了组件的独立复用。还有,视图通过模型界面访问数据的效率很低,这是由于在模型层中提供的接口是不相同的,因此视图为了获得足够多的显示数据,往往需要进行多次调用,这种方式访问数据的效率比较低,并且对系统操作性能也有一定的影响。

综上所述,通过对MVC模式的分析,可以看出MVC模式的作用是很明显的,并且在大的系统结构中作用会更加明显。

2MVC模式基本实现方法

实现MVC模式的方法不止一种,例如使用Struts或jsf等MVC模式的框架,本身就是一个实现。下面主要来介绍一种简单的基本实现方法。

2.1Model的实现

在Model的实现过程中,最关键的地方在于定义一个具有存储多个数据更新的用的监听对象向量。并且根据这个向量可以编写出下面的两个函数,以此来分别实现添加数据业务时监听对象的添加和发生更新时能及时把消息发送给所有的监听对象:

//当注册模型发生修改时需通知的对象

public void addChangeListener(View cv) throwsException{

//** 1添加cv到变化监听队列

changeListeners. add(cv);

}

//触发模型变化事件

private void fireModelChangeEvent(Objectf){

View V;

for ( int i=0; i<changeListeners. size(); i++){

try {

//将变化通知队列中的每个视图

System. ou.t println(dMode:l fireModelChangeEvent loopd+i);

v=(View)changeListeners. get( i);

v. handleChange(f);

}catch(Exception e){

System out println(e toString());

}

}

}

2.2View的实现

在视图的实现过程中,关键的地方有三点。第一点是我们在进行视图构造函数时,需要将视图注册到指定的模型对象中去(model addChangeListener(view));第二点需要做的就是定义一个能够存放和它所关联的控制器对象的向量,并且我们需要根据这个向量的对象,定义增加动作监听者的注册方法(public void addUserGestureListener(Controllerb));最后,我们还得需要为视图编写一个能够依靠传入对象的类型来显示不同的界面的方法。通过上面所说的三个关键点,视图就能够实现接收模型更新的通知、发送动作到控制器,并且能够接受控制器对显示界面的控制。

2.3Controller的实现

相对于模型的实现和视图的实现,控制器的实现要简单很多。因为对于控制器来说,只需定义一个模型对象和视图对象就能能实现。模型对象是为了方便在函数中进行调用其业务的行为,视图对象是为了方便于将控制器的动作注册到视图中去,使他们可以成为该视图的动作接收者。

3基于MVC模式的Struts框架

所谓的基于MVC模式的STRUTS框架,实际上就是把JavaServlet、JSP、自定义标签(TagLib)、JavaBeans、XML和信息资源(Resource Bundles)整合到一个统一的框架中,由此组成了一个可复用的MVC设计。Struts框架本身带有自己的控制器,同时还整合了其它的一些能够实现模型层和视图层的技术,而且,Struts框架提供了许多可供扩展和定制的地方。同时,Struts提供自定义标记库,通过这些自定义标记可以顺利完成和系统的Model部分交互,通过使用这些自定义标记创建的JSP表单,可以实现和Model部分中的ActionForm的映射,以此来完成对用户数据的封装。图2显示了Struts的工作流程。

(1)Struts框架总控制器(ActionServlet),作用是用来完成所有初始化工作。当启动总控制器之后,首先会读取Struts-config.xml 的配置信息,目的是为相应的对象进行不同的Struts模块初始化。当在Web容器启动时,初始化动作也会自动完成,总控制器完成初始化动作后,将通过URL匹配映射截获所有以.do结尾的URL请求。

(2)用户向Web应用程序器提交一个请求的方法有两种,一种是提交表单,另一种是调用URL,而用户请求的数据会通过HTTP协议上传给Web服务器。

(3)控制器接收HTTP请求,然后控制器首先会通过ActionConfig找出对应该请求的Action子类,如果没有找到对应的Action,控制器直接会把请求转发给JSP或者静态页面。如果有对应的Action,并且这个Action有一个相应的ActionForm,ActionForm首先会被控制器实例化,然后会使用HTTP请求的数据来填充其属性, 然后保存在ServletContext 中,这样就可以被其它Action对象或者JSP调用。

(4)控制器根据配置信息将请求切换到具体的ActionFormBean也一并传给这个Action的execute()方法。

(5)Action一般其中只包含一个execute()方法, 它的作用是负责执行相应的业务逻辑,然后会返回一个ActionForward对象, 控制器会通过这个ActionForward对象来进行转发工作。

(6)根据业务处理时产生的不同结果,Action会返回一个目标相应对象给总控制而这个目标相应对象对应的是一个具体的JSP页面或者另外一个Action。

(7)总控制器根据业务功能Action返回的目标响应对象,将HTTP请求转换到这个目标响应对象中, 通常来说,它是一个具体的JSP页面。

(8)目标响应对象(JSP)将结果页面展现给用户。

4结论

综上所述,MVC模式已经被广泛的应用于软件开发之中,它可以通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。而使用基于MVC模式的Struts框架极大的提高了控制层的灵活性,增加了代码的可重用性。并且由基于MVC模式的Struts框架构建的复杂系统可以分离数据访问和数据表现,让开发人员可以开发一个可伸缩性强、便于扩展的控制器,来维护整个流程。因此在结构复杂的系统中基于MVC模式的Struts框架有着很大的优势和发展前景。

参考文献

[1][美]Ivor Horton.Java 2 入门经典 JDK5[M].潘晓雷,于浚泊,王丹,等,译.北京:机械工业出版社,2005:1-1058.

[2]赖英旭,刘增辉,李毛毛.MVC模式在B/S系统开发中的应用研究[J].微计算机信息,2006,22(10-3):62-64.

[3]孙卫琴.精通Struts:基于MVC的Java Web设计与开发[M].北京:电子工业出版社,2004,8:7-35.

[4]菜剑,景楠. Java Web应用开发:J2EE和Tomcat[M].2版.北京:清华大学出版社,2005,1:35-250.

[5]孙卫琴,李洪成.Tomcat与Java.Web开发技术详解[M].北京:电子工业出版社,2004,4:29-134.

[6]殷兆麟,张永平,姜淑娟.Java网络高级编程[M].北京:清华大学出版社,北京交通大学出版社,2005,5:94-235.

[7][美]Marco Pistoia,Nataraj Nagaratnam,等.企业级Java安全性:构建安全的J2EE应用[M].尹亚,明喻卫,严进宝,译.北京:清华大学出版社,2005,3:72-109.

mvc框架篇3

关键词:计算机软件;系统重构;MVC框架;

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)22-0063-04

Abstract: The WebForm development mode control is rich, can quickly build Web applications, but there is a low reusability, low safety, running speed, etc., is not suitable for the development of large systems. In order to improve the security, maintainability and performance of the paper management system, MVC framework is adopted to reconstruct the system structure, and the data layer is reconstructed by using object relational mapping and Record Active technology. Compared with the test results, the system can be improved, the loop complexity, the number of code clones and the usage rate of CPU can be reduced.

Key words: computer software; system reconstruction; MVC framework;

1 问题背景

中的WebForm是一种可视化开发模式,用户通过拖拽控件进行网页界面的设计,Visual Studio编辑器自动在网页文件生成相应的代码,然后双击控件或者在事件视图中双击相应事件,将在另外一个对应的.CS文件中进行编码,实现对网页控件的交互操作[1]。由于开发方便、上手容易,WebForm模式在小型项目开发中广泛应用。但是对于中大型项目,采用WebForm模式进行开发的话会出现不少问题:项目中充斥着大量的网页文件和后台代码文件,文件数量过多难以管理;项目网页文件与逻辑代码文件紧密耦合,代码重用性不高;网页代码中暴露过多的系统实现细节,容易遭受网络攻击导致信息安全问题;数据库操作的代码实现比较繁琐,每次涉及到数据库交互操作都要重新写SQL语句;功能扩展麻烦,当需要扩展新的功能页面时需要重新设计网页界面和进行编码。

我们在开发论文管理系统的过程中,初期为了快速实现系统的主要功能,使用了 WebForm模式来进行项目的开发工作。但随着项目的进行,由于系统功能的不断扩展,同时用户需求有了一些更改,WebForm模式带来的问题逐步显露出来。针对开发工作中出现的问题,项目组决定使用 MVC框架重构系统,希望开发工作向着代码的结构规范、冗余度低、重用性好,系统扩展方便、安全性更高的方向发展,使系统具有更高的稳定性和可维护性。

2 MVC框架分析

MVC框架是现代大型项目开发中广泛使用的开发模型,其基于面向对象的设计模式极大提高了程序的开发速度,降低了功能扩展维护带来的不便,使功能像组件一样自由变换[1]。

2.1 MVC核心部件

MVC框架模式将系统按功能模块化地分成三个主要的部件:模型(Model)、视图(View)、控制器(Controller)。它们各自处理自己的任务,相互之间通过接口进行交互[2],其功能划分及相互关系如图1所示。

跟传统的WebForm模式相比, MVC框架放弃了很多有缺陷的特性,如Code-behind页面、服务器控件、数据绑定、URL Rewrite等,取而代之的是Controller、HtmlHelper、Routing等类库和组件[3]。与WebForm相比, MVC在Web开发领域显得更加专业化,对Web开发的效率提升非常明显,特别是在规模较大、功能点多、页面数量多逻辑结构复杂的大型应用程序开发中,MVC模式在健壮性、代码重用和结构方面有了很大的提升 [4]。使用MVC架构开发出软件代码有较强的可理解性、重用性、系统稳定性、可维护性,能够减少软件的修改、再次开发等方面的工作量,减少了在系统方面所投入的成本[5]。

2.2 MVC框架运行流程

在 MVC4中,所有请求都是通过项目根目录中的一个Global.asax文件作为唯一的入口,客户端向服务器提交的请求首先由这个文件接收,由该文件执行Application_start()方法实例化启动进程,并调用路由匹配注册表确定指派到某一个控制器处理。控制器接到请求后,可以调用某一个对象模型来处理;模型根据相应的业务逻辑进行逻辑处理,并且与数据库进行交互,返回所需的数据;最终控制器加载并渲染指定的视图来将处理好的数据呈现给用户。系统采用 MVC 后的运行流程如图2所示。

3 系统结构的重构

在的WebForm模式中,系统的代码模块是按页面来分的,也就是说有多少个页面就有多少个逻辑处理文件,每个代码文件仅仅处理自身页面的代码逻辑,这种划分代码模块的缺点是,一旦页面过多,就会变得很杂乱,代码文件查找困难,维护难度高,而且不利于日后功能迭代或者功能修改。而在 MVC中,项目代码文件按部件来划分,而每个部件又通过系统功能的模块化对应来实现二级划分,整个项目就变得有层次和条理,维护起来也变得方便。

3.1 系统功能分析

毕业设计管理系统是一个教师、学生和系统管理员使用的教务管理平台。按使用角色可以对系统的功能作以下分类:教师有课题、修改个人信息、查看课题列表、查询学生信息等功能;学生有选择课题、修改个人信息、查询课题列表、查询教师信息、提交上传文档等功能;系统管理员有审核课题、课题信息管理、网站功能设置、用户信息管理、角色分配、论题管理等功能。

3.2 按功能划分模块

在MVC框架中,控制器实际上就是以相近功能组成的模块。对系统的功能进行分析后,我们进行模块的划分,将功能相近的代码逻辑放到同一个控制器里面,而每一个功能都通过控制器里的方法来实现,方便调用。根据对系统的功能进行分析,本系统的控制器可分为:教师控制器、学生控制器、角色控制器、用户控制器、论题控制器、系统设置控制器等。

在每个都模块抽象为MVC框架中的控制器后,根据每个模块中需要的页面在视图部分进行添加。这样,我们就把整个系统的功能进行了模块化的划分。模块之间既相互独立,又可以通过接口进行相互调用和联系。

3.3 代码文件结构

图3(a) 是WebForm模式中的文件结构,大量的文件都堆放在同一个目录,显得杂乱无章;图3(b)是使用了MVC模式重构后的代码文件结构,为每个核心部件都分配了不一样的目录,这样的做法分层合理,文件结构显得规范有条理;图3(c)是控制器部件目录的展开图,控制器目录中的每个文件都对应每一个模块,有些模块因需要分开两个控制器文件来实现,对应的视图文件在Views目录下。

4 数据层的重构

系统结构的重构完成之后,我们还利用对象关系映射(Object Relational Mapping,ORM)和Active Record技术来进行数据层的重构。

4.1 ORM和Active Record技术

ORM是随着面向对象思想的成熟而产生的一种软件开发技术。目前主流的框架产品,如 MVC、Hibernate等,已经将ORM集成在内。Microsoft Entity Framework 是一个对象关系映射(ORM)工具,它能将关系型数据转换成.NET数据对象,也可以将.NET数据对象转换成关系型数据 [6]。

Active Record是一种领域模型模式,最早由Rails提出,它在ORM的基础上,把负责持久化的代码也集成到数据对象中[7]。传统的ORM只是把数据对象与负责持久化的代码分隔开来,数据对象只是单纯的包含了自身的数据结构体。而在Active Record中,他们不仅是数据实体,而且包含了业务逻辑,集成了把自己持久化的操作。在 MVC中,Active Record已经定义好了集成持久化操作方法的模型父类,数据对象类只需要继承这个父类,就可以继承这些持久化操作的方法,通过简单的方法调用,就可以实现持久化操作。

4.2 重构系统的数据层

利用ORM和Active Record技术,我们在处理有关操作数据库的业务逻辑时,不需要接触到SQL语句。对数据的操作简化成了对象的操作,为一张表声明一个类,并使类中的成员对应关系型数据库中的字段,就可以跟这个类的实例进行交互了。至于这个对象中的数据怎么跟数据库交互,我们完全不用关心。ORM会根据实际需要生成相应的SQL语句执行,返回的结果又会自动处理成对象或者开发者想要的形式。

重构系统数据层的具体操作分以下两个步骤:

1)为系统的数据对象建立模型,将数据对象转化为关系型数据库中的表和列。

2)修改业务逻辑中需要与数据库交互的代码,将SQL语句替代为由Active Record操作数据对象。

重构系统数据层后,我们能够轻易地通过实例化数据对象来从模型中获取需要的数据,以系统的用户模块为例,用语句“List userList = db.users.ToList();”即可获取所有用户模型的集合。与直接使用SQL语句相比,Active Record技术更为简洁,不易出错,能够进行参数过滤和绑定,还能够屏蔽数据库之间的差异。Active Record技术简化了开发者的工作,使得系统的功能扩展或者修改都比较容易。

5 系统重构效果测量

为了比较重构后系统源代码的重用性、可维护性、冗杂度和性能上的差异,我们使用Visual Studio 2013分别对代码度量值、代码克隆分析和CUP使用率这三个指标进行了测量。

5.1 代码度量值

代码度量是一组对软件质量进行度量的数值,开发者依靠这组数值可以更好地分析他们开发中的代码。通过代码度量,开发者可以清楚看到哪些类型和/或方法应该重写或者进行更加彻底的代码测试。 开发团队也可以通过这组数值识别代码中哪些有可能出现的风险、对项目的状态进行了解,并对软件开发的进度进行跟踪[8]。代码度量会检测出项目代码中所有定义的命名空间,再在其中统计可维护指数、圈复杂度、继承深度等检测值。图4与图5为重构前后代码度量值的结果。

我们的目标是对可维护指数和圈复杂度进行分析。可维护指数的范围在0 至 100 之间,表示了代码维护的相对容易程度,数值越高意味着可维护性越好;而圈复杂度则是描述了代码在结构上的复杂度,它是通过计算程序流中的不同代码的路径数量来创建的 [8]。

对本次重构前后的系统代码检测结果显示,代码重构后可维护指数提升了14%,圈复杂度减少了原来的约40%。同时从层次结构看出,使用了MVC框架模式,代码的根命名空间比原来的少了很多,代码层次分明,可见代码的可维护性有了一定程度的提高。加上使用Active Record技术进行数据层对象封装,对数据对象的操作不再需要局部定义对象的结构,只需要调用Active Record的数据层对象就能胜任,这样相同功能的代码就相对集中在同一个目录,圈复杂度相应地降低。

5.2 代码克隆分析

代码克隆分析就是检测系统项目源代码中重复的部分,使开发人员能够整理重复的代码,提高代码质量。我们在研究中发现,Visual Studio的代码克隆分析不是仅仅匹配字面上的代码,而且能通过代码分析检测逻辑相同的代码,它不仅能搜索代码相同的模块,而且还能搜索语义上类似的结构。图6与图7为重构前后的代码克隆分析结果。

通过对比重构前后的代码克隆分析结果,可以看出使用MVC框架重构后的代码克隆数远小于重构前。而这意味着重构前有大量的重复代码存在,这样的坏处是,通过复制粘贴的源代码一旦需要修改部分代码,就需要查找所有涉及相同功能的地方一并修改;也有可能需要修改某些特定的地方,其他地方保持不变,这时候即使IDE编辑器有批量修改代码的功能也无济于事了。基于MVC框架重构后的代码高度抽象和封装,模块与模块之间已经有了明确的分工,很多相同的逻辑将合并起来;而ORM将通过写SQL语句来获取数据操作的源代码转化成了通过调用ORM封装的方法来生成数据对象的源代码,重复的SQL语句将不再出现,这也是克隆代码降低的其中一个原因。在软件开发的过程中,使用重复代码的频率越少,日后源代码的维护就会越容易。可见,重构后的源代码可维护性有了很大的提高。

5.3 CPU使用率

使用MVC框架重构后的项目抽象封装程度高,有人觉得会对性能造成影响,因为每次运行都要初始化封装好的对象,有可能会加载一些不需要的组件来增加服务器的开销。我们根据重构前后的代码,使用Visual Studio运行代码分析,访问论文管理系统的同一个页面,监听CPU使用率随时间变化的过程,测试时间大约是1分半钟。期间页面每隔一段时间(约10秒)被刷新,不断向服务器发送请求。图8与图9为重构前后的CPU使用率曲线图。

从图8和图9的对比可以看出,重构后的系统CPU使用率总体上都是比重构前要低的。前10秒左右是Visual Studio工具编译部署项目的时间,可以看出使用MVC框架后编译部署过程CPU使用率是使用前的约4倍。这是因为使用WebForm在很大程度上要依赖比较多还没有编译好的部件,很多如图片上传、文件生成、视图渲染的功能都要开发者自行通过源代码实现,编译起来就要耗费相对较多的资源;而MVC框架将绝大部分的部件封装成为二进制文件,只需要编译主要的代码就可以了,CPU使用率自然就低了。

约过了10秒后,是页面接受请求进行逻辑处理的过程。可以看出重构后的系统除了第一次处理请求CPU使用率相对较高,为23%左右,接下来处理请求的CPU使用率都是不到10%。而重构前的系统CPU使用率一直都在波动,居高不下,平均在20%。产生这些差异的原因是,.NET MVC框架在页面第一次被请求的时候就生成了页面的缓存,往后的请求处理就不再需要进行处理页面渲染的步骤;同时,因为服务器已经装上了.NET MVC框架的组件,运行的时候就不再需要额外的CPU资源,所以如果没有在处理请求的情况下CPU使用率都接近0。而传统的WebForm模式没有缓存机制,每次加载都需要重新进行页面渲染工作,CPU使用率偏高,而且在解释非系统自带组件也需要占用一定的CPU资源。

6 总结

本文使用了 MVC框架进行了论文管理系统的重构,按系统的功能进行抽象分类,各个部分的功能分成了各个模块,使耦合性尽量低,并通过接口进行交互。对于系统的数据层,运用ORM与Active Record技术进行重构,为数据处理提供了更加直观便捷、便于维护的方式。

对重构前后的代码度量值、代码克隆分析和CUP使用率的对比结果表明,使用MVC框架对于解决代码冗余、增强系统可维护性和运行性能都有比较大的帮助。

致谢:本文作者向指导老师孙宇锋教授、李林同学以及有关老师表示真诚的谢意!

参考文献:

[1] 吴昌钱.net框架下软件开发模式研究[J].哈尔滨师范大学自然科学学报,2014,30(3):99-102.

[2] 林永良,胡建平,吴树林.基于.NET MVC架构下的科研项目管理系统[J].计算机系统应用,2014(12):217-220.

[3] 吴胜,刘建波,刘士彬. MVC框架下内容管理系统的探索与实现[J].微计算机信息,2010(36):30-32.

[4] 周泉.浅谈从 WebForm 开发模式到 MVC 开发模式的发展[J].计算机光盘软件与应用,2012(15):248-270.

[5] 苑庆涛,张新柱,马博,等. 基于 MVC的数字化管理平台[J].计算机技术与发展, 2013(12):164-167.

[6] 龚兰兰.基于.Net MVC4 的Code First 模式数据库开发和迁移[J].信息通信,2014(12):99-99.

[7] 许日丹,杨俊.基于Rails框架的ActiveRecord模块研究与应用[J].软件导刊,2007,57(13):127-129.

mvc框架篇4

图2 ctmbform作为actionform bean可以在视图和控制器之间传递html表单,其属性与表单中的字段是一一对应的,ctmbform的validate()方法可以完成与表单的数据格式和语法相关的有效性检查,如销售单编码、结算金额不能为空等。

struts框架的核心控制器组件actionservlet的doget()或dopost()方法在收到用户请求后都会调用其process()方法处理请求。首先选择能够处理当前请求的子应用模块,并在request范围内写入配置信息和消息资源;之后完成一些预处理请求操作,在预处理请求操作的尾部创建并保存ctmbaction实例,并调用ctmbaction实例的execute()方法,该方法再调用相应模型进行实际的业务逻辑处理,完成用户的请求;最后根据execute()方法返回的结果执行请求转发或重定向。 在系统中模型由ejb组件实现,系统多层结构的设计如图3所示: 图3 ctmbejb作为一种jndi资源运行在ejb容器中,在多层结构中ctmbejbdelegateimpl业务实现类无法创建ctmbejb组件,而是通过查找名为“ejb/ctmbejb”的jndi资源获得该资源的引用。 ictmb接口的作用是削弱客户程序与模型的关系,客户程序通过该接口来访问ejb组件的业务方法。 ctmbaction对ejb组件进行调用的时序图如图4所示:

图4 在多层结构中,业务对象bo主要封装了一些实体,如客户customerbo、销售单salesslipbo、结算单balancingslipbo、应收款帐accountsreceivablebo、预收款帐prereceivingbo、现金帐cashaccountbo和银行帐bankaccountbo等等。图5所示为上述七个业务对象之间的关联关系,以及部分业务对象的属性和方法:

图5

mvc框架篇5

【关键词】MVC框架 担保业务 管理系统

1 引言

经济突飞猛进为中小企业带来了发展的机遇,但是中小企业面临着融资难的困境,如何快速及时的解决临时资金困难成为中小企业主和金融业人事思考的课题。再此环境下为中小企业提供担保的企业应运而生,国发[2012]14号文件,国务院关于进一步支持小型微型企业健康发展的意见,等文件显示当前担保业务的到国家规范并获得支持。中国的担保行业的发展也从家庭式、作坊式、地下式转向正轨,逐步规范。目前业务量的增加,以及银行借贷业务流程的日趋复杂,传统的人力方式已经满足不了担保公司的业务需求,信息化、规范化的业务流程是完善业务流程,提高工作效率的主要方式。

本文主要结合国内外担保行业以及管理信息系统情况,以保盈担保公司的实际业务流程为蓝本,采用MVC框架思想分析设计的担保业务管理系统。

2 MVC架构技术

MVC的框架模式,这是一种软件设计典范,通过把M(Model)与V(View)代码分层的形式,实现代码的分离,将业务和视图分开是同一个程序可以有不同的表示,C(Controller)的作用就是使M和V能够保持同步,确保视图能随着M的实时变化及时更新。MVC是属于一种低耦合的设计思想[1],软件工程的工程管理完成开发分工,降低在实现和后期维护的难度。

2.1 Model层

Model层主要封装数据模型或抽象的是系统对象。将使用到的数据结构抽象出来,封装成多个的JavaBean。除了DTO(Data Transfer Object,数据传输对象)以外,每一个JavaBean都是与数据库中的表对应。

2.2 View层

View层主要是与用户交互的层。用户通过该层向系统发出,看到业务处理的结果。用与实现该层的技术主要是一些前端的技术,如HTML5、JSP和PHP等。可以用一些辅助语言如JavaScript来增加一些动态的效果,用CSS来美化UI等。

2.3 Controller层

Controller层是系统的“枢纽”,控制着整个系统的流程。用与实现该层的技术主要使用Struts2框架,它提供前端核心控制器StrutsPrepareFilter和StrutsExecuteFilter,负责拦截用户请求,并将请求发送给用户自定义控制器组件也就是Action。Action负责根据系统具体的业务逻辑,调用系统的Service组件。而Service组件调用DAO(Data Access Object)组件向Action提供服务[2]。DAO中封装着Model层对象基本的创建、查询、更新和删除等操作,对应于数据库中表的CRUD(创建、查询、更新和删除)等原子操作。提供数据持久化操作的是Hibernate框架,其对JDBC采用了非常轻量级的封装,使我们能使用对象编程思想来随心所欲的操纵数据库。

3 担保业务管理系统的功能分析与设计

保盈担保公司主要针对中小型企业或个人在短时间内周转资金不足,而产生的对小额贷款的需求。小额贷款作为贷款的一种,银行贷款审批周期长且手续繁琐,不能满足临时短期用款的需求。

保盈担保公司通过客户关系系统能够即时掌握借款人的信息和诚信,即使掌握借款人的财力和偿还能力,分析风险高低,短时间内做出审批能满足借款人的即时性要求。

3.1 担保客户管理系统用例分析

将系统划分为用户登录、个人客户管理、企业客户管理、各类业务申请、担保业务管理等模块,知道了我们需要做什么。这里我只介绍我负责的模块,下面我们将把这些系统要实现的功能通过功能结构图的形式展示出来,保盈担保客户关系管理系统用例图如图1所示。

3.1.1 用户管理

用户管理包含用户注册、用户登录等。用户登录即使用合法帐号和密码登录到系统,进入系统的管理界面。用户通过填写提交登录表单,服务器接收到输入的帐号和密码数据,执行对应的检查合法性程序,对比数据库用户记录,检验合法与否。如果输入错误,系统会提出相应的错误,这里为了安全起见,在登录是加入了输入验证码的功能。

3.1.2 客户管理

客户管理功能用于管理个人客户的信息,包括增加、维护等。维护包含查看信息、修改信息、删除某客户、查看某客户的更多信息等功能。

①、增加客户就是添加个人客户的各种信息,在添加客户时系统会校验用户输入的信息是否合法,并按身份证号查看当前添加的客户是否已经存在,如果校验成功,该个人客户就添加成功。②、信息查看就是列出当前数据库中存在的所有个人客户的主要信息,如果客户非常多,我们会把这些用户信息进行分页显示。③、修改信息就是在信息查看中选定某个客户对其进行修改信息。③、删除客户就是在信息查看中选定某个客户,进行删除操作,删除时会弹出一个窗口询问是否删除,以免用户误删除。⑤、浏览信息就是在信息查看中浏览该客户的更多信息。

3.1.3 担保业务管理

业务管理主要完成客户申报担保贷款申请、初审、风控检查和审批等担保业务流程。通过流程能够实现业务流程的信息化存档和规范化管理,减少流程不规范,给公司带来风险或引发经济损失。

3.2 担保业务申请的审批流程

业务管理的基本过程如图2所示,根据信用不同和风控调查会产生不同的简单和相对复杂的全部流程。①、用户提出担保申请,需要在线提交申请表和附加公司和个人的身份资料、公司证明、进账流水银行证明和企业交税证明、土地使用证明、有价证券和其他不动产等资产财力证明材料。②、通过信用初审主要通过信用库(偿还记录和人民银行出具的个人诚信报告)调查信用,决定本期申请,不足信用的进入失败流程,信用足,但是担保贷款费用数额较大,风险较大者需进入风控调查流程,而信用级别高,且贷款额度小的可以进入简易流程,审批过程。③风险调查过程主要完成对借款申请人现场的调查,根据现场分析申请者的偿还能力和财力状况,决定风险较大超负还是不超风险,如果分险超负,进入失败流程,而不超风险时,进入审批环节。④审批主要有担保公司的总经理等管理者对申请做最后的考核,做出批准和不批准的决定。批准的进入成功环节,将会向银行等金融机构为申请者担保借款。

3.3 担保业务管理的设计

本系统的设计定位于B/S结构,用户通过浏览器在Internet的网络环境下,完成业务的申请,管理员的功能具有较高权限,同时需要在专用的Intranet环境下完成。浏览层采用JavaScript、CSS和HTML5技术完成界面的设计;业务层通过Struts、Java Bean和EJB技术完成业务请求的响应和数据的处理;在持久层通过Oracle技术和Hibernate技术实现,完成数据的读取与存储。

系统的设计采用Eclipse平成编码,采用Tomcat7.0搭建Web服务器平台,完成系统的运行与在线服务。

4 总结

担保业务管理系统的分析与设计采用面向对象技术,基于MVC框架对浏览层、业务层和控制层分层完成设计,实现了代码分离在设计过程和日后维护提供了便利。完成了担保业务的申请与审批等流程的设计,提高了担保公司的业务管理水平和工作效率,但还没有完成对业务帐款的管理和催缴等财务管理,本系统的设计时流出了接口,今后需进一步完善。

参考文献

[1]陆荣幸,郁洲,阮永良,王志强.J2EE平台上MVC设计模式的研究与实现[J].计算机应用研究,2003(03).

[2]邓玉龙.MVC设计模式在电子商务系统中的研究与应用[J].南京邮电学院学报,2002(02).

[3]杨新艳,梁宏涛.独立本科院校Java语言教学的研究[J].计算机教育,2009(11).

作者简介

梁宏涛(1979-),男,副教授,博士生。主要研究方向:网构软件,分布式系统与并行计算。

作者单位

1.青岛工学院 山东省青岛市 266300

mvc框架篇6

J2EE中下的Web应用,一般都是采用经典的MVC构架模式,采用MVC构架模式的Web应用有着很好

>> MVC设计模式在Web开中的应用与研究 基于JAVA WEB中MVC模式的研究与应用 基于MVC编程模型构架的Web程序应用及Java实现探讨 MVC设计模式及其改进版在Java Web开发中的应用 基于MVC模式的组织人事管理WEB系统的设计与实现 MVC设计模式在基于WEB的远程测控系统软件开发中的应用 大型仪器设备协作共用系统的Web构架的设计与分析 基于.NET MVC框架的Web设计 基于MVC架构的Web应用开发 Web前端MVC框架的意义分析 Web软件系统开发框架设计在MVC模式的实现 基于MVC模式的Web框架设计关键技术研究 MVC模式下多界面控制的设计和实现 基于MVC开发模式的医院信息科报修管理系统的分析与设计 基于MVC模式分层结构的网络书城分析与设计 平台中MVC设计模式的应用 基于MVC设计模式Struts框架的应用方法 基于Spring MVC框架的Web登录模块的设计与实现 基于MVC模式下的开发框架建设与改进 MVC设计模式中的“视图模型”与“视图” 常见问题解答 当前所在位置:l页面,通过该页面发出一个参数为“add”的请求,该在本系统表示增加用户,传递给控制器层,也就是servelt包下UserServlet类。关键代码如下:

然后,UserServlet类根据读取到的参数,读取资源文件a.txt,运用反射技术创建出AddUserAction类的对象,进行增加用户的操作。关键代码:

String action=req.getParameter("action");

Action act=null;

String forward=null;

Properties prop=new Properties();

prop.load(this.getServletContext().getResourceAsStream("/WEB-INF/a.txt"));

String realaction=prop.getProperty(action);

try {

act=(Action)Class.forName(realaction).newInstance();

forward=act.execute(req, resp);

} catch (Exception e) {

e.printStackTrace();

}

之后,AddUserAction类对象调用dao层的IUserDao对象,操作数据库,把用户数据添加到数据库里面。关键代码如下:

IUserDao dao=new UserDaoImpl();

boolean finished=dao.addUser(user)

接着AddUserAction对象就回返回一个参数给UserServlet类,UserServlet类根据该参数跳转到相依页面,本系统中,如果添加成功跳转到successful.html页面,添加失败就跳转到error.html页面。关键代码如下:

boolean finished=dao.addUser(user);

if(finished){

return "successful.html";

}else{

return "error.html";

}

最后,UserServlet类再根据AddUserAction对象传回的参数跳转到相应的页面,关键代码如下:

if(forward != null) {

RequestDispatcher rd=req.getRequestDispatcher(forward);

rd.forward(req, resp);

}

其他功能的系统流程和实现和上面的基本类似,都是基于MVC构架模式,而且用到了反射和接口技术,使得如果应用需要扩展或者改进某些功能的话,不需要更改源代码就可以实现。

3 小结

系统的设计采用了MVC模式,虽然会增加代码程序的复杂性,但是使得整个系统的构架更加清晰明了,更加易于理解。因为系统被严格地分层,如果某一天某个功能的业务逻辑发生变化,只要更新业务逻辑层就行,不需要惊动其他层,同样道理,如果其他层发生了变化的话,也不会影响其他层,使得系统稳定性增加。

系统将来的维护升级可能需要各个方面的人才,有人专门负责界面的设计,有人专门负责逻辑业务,有人负责数据库方面的,通过MVC分层,各个层次的人只需要懂得这一层需要的知识就行了,分工更细更精。

参考文献

[1]明日科技.JSP项目开发案例全程实录(第2版)[M].2011.1.1.

[2]聂明.JavaWeb应用开发项目教程[M].北京:电子工业出版社,2011(09):1.

[3]李兴华.JavaWeb开发实战经典基础篇[M].北京:清华大学出版社,2011.8.1.

工作单位

mvc框架篇7

关键词:Spring MVC 框架 Web开发

一、引言

在软件开发中出现过各种各样的框架,开源软件的兴起,使得各种各样的框架纷纷出现。例如,Apache组织下就拥有诸多的框架类产品。框架就是一组协同工作的类,它们为特定类型的软件构筑了一个可重用的设计。然而,传统的框架使得应用程序组件过于依赖于框架中的类,这种耦合度的提高降低了组件的复用性。Spring框架的出现,使得组件之间更松散的耦合成为了可能。

二、Spring简介

Spring框架由一个容器,一个配置和组织组件的框架,和一组内置的为事务、持久化和Web用户接口提供的服务组成。作为一种轻量级的J2EE框架,Spring提供了一种有效的方式来建立和组织J2EE应用程序。

Spring IoC,借助于依赖注入设计模式,使得开发者不用理会对象自身的生命周期极其关系,而且能够改善开发者对模式的使用。IoC(Inversion of Control;控制反转),又称DI(Dependency Injection;依赖注入),是面向对象领域新兴的编程思想,也是Spring的精髓所在。简单地说,IoC就是指程序之间的关系由容器来控制,而不是传统实现中由程序代码直接操控。这也就是所谓IoC的概念所在:控制权由应用代码转到外部容器,控制权的转移,也就是所谓的反转。IoC将控制创建的职责搬进了框架中,并把它从应用代码脱离开来。当使用Spring的IoC容器时只需指出组件需要的对象,在运行时Spring的IoC容器会根据XML配置数据提供给它。

Spring AOP,借助于Spring实现拦截器,开发者能够实现以声名方式使用企业级服务,比如安全、事务服务。AOP合理地补充了OOP,借助于Spring AOP,开发者能够高效地使用J2EE服务。

Spring服务抽象,借助于各种J2EE API抽象,使得开发者能够一致地使用J2EE技术,而不管具体是使用什么J2EE API,借助于Spring服务抽象,使代码大大减少,满足“更少代码,更少BUG”的软件设计原则。

Spring IoC+Spring AOP+Spring服务抽象,一起形成Spring,这样一个有机体,使得构建轻量级J2EE成为可能。

三、Spring MVC简介

大部分Java应用都是Web应用,Spring框架提供了构建Web的框架。和众多其它Web框架一样,它基于MVC设计理念。此外,由于它采用了松散耦合可插拔组件结构,因此具有比其它MVC框架更多的扩展性和灵活性。

Spring MVC框架围绕DispatcherServlet这个核心展开,DispatcherServlet的作用是截获请求并组织一系列组件共同完成请求的处理工作。

Spring MVC是基于Model 2实现的技术框架,Model 2是经典的MVC(Model View Control)模型的Web应用变体,这个改变主要源于HTTP协议的无状态性。Model 2的目的和MVC一样,也是利用处理器分离模型、视图和控制,达到不同技术层级间松散耦合的效果,提高系统灵活性、复用性和可维护性。在多数情况下,你可以将Model 2与MVC等同起来。

四、用Spring MVC进行开发的处理过程

(1)整个过程开始于客户端发送一个HTTP请求。

(2)Dispatcher Servlet接收这个请求后,并将请求的处理工作委托给具体的处理器(Handler),后者负责处理请求执行相应的业务逻辑。在这之前,Dispatcher Servlet必须能够凭借请求信息(URL或请求参数等)按照某种机制找到请求对应的处理器,Dispatcher Servlet是通过垂询Handler Mapping完成这一工作的。

(3)当Dispatcher Servlet从Handler Mapping中得到当前请求对应的处理器后,它就将请求分派给这个处理器。处理器根据请求的信息执行相应的业务逻辑,一个设计良好的处理器应该通过调用Service层的业务对象完成业务处理。

Spring提供了丰富的处理器类型,在真正处理业务逻辑前,有些处理器会事先执行两项预处理工作:

第一项:将HttpServletRequest请求参数绑定到一个POJO对象中;

第二项:对绑定了请求参数的POJO对象进行数据合法性校验;

(4)处理器完成业务逻辑的处理后将返回一个Model And View给Dispatcher Servlet,Model And View包含了视图逻辑名和渲染视图时需要用到的模型数据对象。

(5)由于Model and View中包含的是视图逻辑名,DispatcherServlet必须知道这个逻辑名对应的真实视图对象,这项视图解析的工作通过调用ViewResolver来完成。

(6)当得到真实的视图对象后,DispatcherServlet将请求分派给这个View对象,由其完成Model数据的渲染工作。

(7)最终客户端得到返回的响应,这可能是一个普通的HTML页面,也可能是一个Excel电子表格,甚至是一个PDF文档等不一而足的视图形式,Spring的视图类型异常丰富和灵活。

参考文献:

[1]王福强.Spring揭秘.人民邮电出版社,2009.

mvc框架篇8

【关键词】Struts2 MVC设计模式 OGNL 高校科研管理系统

现代软件设计的原则之一是模块内“高内聚”,模块间“低耦合”,为了实现这个原则,软件开发人员在进行软件开发时一般会对应用中的各组件按功能进行分类,不同的组件使用不同技术,并在体系结构上将不同的组件进行分层放置,不同的组件被严格限制在其所在的层内,各层之间以松耦合的方式组织在一起。使用MVC设计模式可以很容易实现这一设计原则,因而现在绝大部分新开发的软件都使用了MVC设计模式。但由于MVC设计模式需要将应用分成模型、视图和控制器三个部件,相对比较复杂,开发人员在设计实现系统时,要得到合理的设计,需要花费大量的时间。选择一个现成的MVC框架可以起到事半功倍的效果,可以极大的提高开发效率。Struts2正是这样的一个框架,因而本文所论述的高校科研管理系统选择了基于MVC设计模式的Struts2框架来设计实现。

1 关键技术

1.1 MVC设计模式

MVC(Model-View-Controller)设计模式是一个把应用的输入、处理、输出流程按照View、Model和Controller的方式进行分离的软件设计模式。在MVC模式下,整个应用程序被抽象为模型、控制器和视图三个部件。三者各司其职,既分工双合作,其中模型用于封装应用程序的业务逻辑功能和相关数据;视图用于呈现模型数据,是用户看到并与之交互的界面;控制器用于控制应用流程,接受用户请求,并调用相应的模型对用户请求进行处理,最后调用视图将结果呈现给用户。

MVC模式发展至今,包含了两种模型,一种是基于C/S架构的经典的MVC模式;一种是用于Web应用的基于B/S架构的MVC模式。前者是通过事件驱动的方式来实现不同部件之间的联系的;后者则是通过请求-响应的方式实现不同部件之间的联系,工作原理如图1所示。

从图1可看出,在基于Web的MVC模式下,表示逻辑和业务逻辑被完全的分离开来,因而模型和视图之间的耦合得到了很大程度的降低。控制器控制流程走向,是视图和模型联系的桥梁,通过控制器的控制,可以实现一个模型的数据使用多个视图来呈现,很容易满足不同用户对同一个模型数据的不同呈现方式的需求。

1.2 Struts2框架

Struts2是一个基于JAVA EE的MVC模式实现经典框架,在Struts2框架中,视图通常由HTML、JSP和Struts2标签表示,JSP 页面结合Struts2 的标签库构成了视图组件的主体;模型由实现业务逻辑的JavaBeans或EJB组件构成;控制器由核心控制器、业务逻辑控制器Action以及struts.xml配置文件共同组成,其中核心控制器是由Struts2框架提供的一个过滤器(StrutsPrepareAndExecuteFilter),负责接受用户请求,并根据struts.xml调用Action,以及根据Action返回的逻辑结果和struts.xml的结果配置分派请求给视图页面。Action是开发人员自定义的一个类,负责调用模型响应用户请求,并返回逻辑结果。客户端和后台的数据交互通过Action类的属性的setter和getter方法来实现。工作原理如图2所示。

从图2我们可以看到,模型以及Struts2的业务逻辑Action都没有与物理视图直接关联,其中的Action只负责返回执行结果,该执行结果与怎样的视图资源关联,是由核心控制器和配置文件来决定的。这种做法可以提供很好的解耦,当需要将某个逻辑视图映射到不同的视图资源时,无须修改Action的代码,只要修改配置文件就可以了。开发人员使用Struts2实现控制器主要是创建业务逻辑控制器Action来调用Model实现业务逻辑处理、获取模型数据以及返回用于映射物理视图的逻辑视图。

2 系统设计

2.1 系统功能设计

高校科研管理系统在功能上包括组织管理、立项管理、项目管理、成果管理、知识管理、权限管理、流程管理和系统管理八个功能模块,系统功能模块结构如图3所示。

2.2 系统总体框架

高校科研管理系统采用B/S架构,使用Struts2作为MVC架构实现。按照MVC设计模式的抽象方法,根据图3所示系统的功能模块结构图,可建立如图4所示的系统总体框架。

部门管理视图、人员管理视图、知识管理视图、系统管理视图和权限管理视图为系统管理员提供交互界面,负责接受系统管理员用户的操作请求,以及将请求的处理结果呈现给系统管理员;项目管理视图、立项管理视图为科研人员、科研管理员、评审专家和主管院长提供交互界面,负责接受这些用户的操作请求,以及将请求的处理结果呈现给请求的用户;流程管理视图给科研管理员提供交互界面,负责接受科研管理员用户的操作请求,以及将请求的处理结果呈现给科研管理员。

系统控制器由核心控制器Struts Prepare and ExecuteFilter、针对不同模块创建的业务逻辑控制器Action类以及struts.xml配置文件。核心控制器接受用户动作请求,并通过查询struts.xml文件后将请求转发给请求的Action实例,Action实例接收请求后调用模型的业务方法,业务方法执行后返回结果给Action,Action根据业务方法执行结果返回一个逻辑结果,核心控制器根据逻辑结果查询struts.xml的结果配置,选择视图页面。

3 系统实现

系统功能设计:基于MVC模式的高校科研管理系统中每一个模块都利用了Struts2框架实现流程的控制,严格按照MVC分层模式来设计,实现业务逻辑和表现层逻辑的分离。下面以部门管理为例,详细说明使用MVC的设计实现。

3.1 业务逻辑控制器Action的实现

部门管理的业务逻辑控制器由DepartmentAction类来实现,该类的主要作用是调用业务逻辑类DepartmentServiceImpl的业务方法响应用户发来的各种操作请求,同时与各个视图页面实现数据的交互。DepartmentAction动作类中包括了addInput()、add()、updateInput()、update()、delete()和list()等业务处理方法,其中addInput()方法用于打开添加部门的JSP表单页面,提交添加的部门信息到动作执行添加前,首先调用setDepartment()将部门的各个信息封装到department对象,并将department对象暂存在动作类的成员变量department中,最后再调用department!add.action动作执行add()方法添加信息;add()方法通过调用DepartmentServiceImpl类的saveOrUpdateDepartment()方法实现持久化一条部门信息;updateInput()用于打开部门信息更新的JSP表单页面,提交更新后的部门信息到动作执行更新前,首先调用setDepartment()将部门的各个信息封装到department对象,并将department对象暂存在动作类的成员变量department中,最后再调用department!update.action动作执行update()方法更新信息;update()方法通过调用DepartmentServiceImpl的saveOrUpdateDepartment()方法更新部门信息;delete()方法调用了DepartmentServiceImpl类deleteDepartment(),实现对指定ID的部门信息的删除,如果该部门存在下属部门,则不允许删除;list()方法调用DepartmentServiceImpl类listDepartments()来获取某一级部门下的所有部门信息,如果所指定级别的部门的ID为0,则返回所有顶级部门的信息,最后返回“list”逻辑结果。在struts.xml文件中配置/department/departmentList.jsp,这样就可以在动作返回“list”逻辑结果后,让核心控制器将请求分派给站点根目录下的department目录下的departmentList.jsp物理视图。动作类中的add()、update()和delete()三个方法执行后都返回“success”逻辑结果,返回该结果后流程将重定向调用department!list.action动作执行list()方法,这样,可以让用户实时看到自己的操作结果。

3.2 模型层(Model)的实现

高校科研管理系统的模型层使用了面向接口编程的方式来提高系统的灵活性,同时按负责内容的不同,将其细分为业务逻辑层和数据持久层。业务逻辑层负责实现业务功能以及调用持久层方法实现数据的持久化,为动作提供服务,包括DepartmentService接口和DepartmentServiceImpl实现类。数据持久层封装了数据的CRUD操作,包括DepartmentDao接口和DepartmentDaoImpl实现类,其中包括了添加部门信息方法addDepartment()、更新部门信息方法updateDepartment()、按指定部门ID查找部门信息方法findDepartment()、删除指定ID的部门信息方法deleteDepartment()和获取某一部门的所有下属部门信息方法listDepartments()。

3.3 视图层(View)的实现

视图层决定如何将数据展示给用户,高校科研管理系统的视图部分主要是JSP页面,包括列表某一部门的所有下属部门的departmentList.jsp页面、添加部门信息的表单页面add_input.jsp和更新部门信息的表单页面update_input.jsp。这些JSP页面中使用了Struts2标签和OGNL表达式。departmentList.jsp使用了Struts2标签来迭代输出每个部门的信息。Web服务器在解释departmentList.jsp过程中,当遇到标签时,会根据departments这个OGNL表达式,来调用动作类中的getDepartments()来获得暂存在动作类成员变量departments中的值。在add_input.jsp页面中的每个表单域的name属性值均使用了“department.属性名”(如:department.name)这样的OGNL表达式,这样在用户输入完各个信息点击提交按钮将信息提交给department!add.action动作处理时,动作根据表单域的OGNL表达式,首先执行setDepartment()将部门的各个信息封装到department对象,然后再将department对象暂存在动作类的成量变量department中。在update_input.jsp页面跟add_input.jsp页面很类似,主要不同的地方是在该页面表单中包含了所要更新的部门的ID及其上级部门的ID,点击提交按钮后,更新后的部门信息提交给department!update.action动作处理,在执行该动作之前,同样根据表单域的OGNL表过式,首先执行setDepartment()将部门的各个信息封装到department对象,并将该对象暂存在动作类的成量变量department中。add_input.jsp和update_input.jsp通过setDepartment()就完成了将用户输入的数据传递给动作进行处理的任务,而departmentList.jsp则通过getDepartments()方法完成将动作获取的模型数据传递给视图的任务。setDepartment()和getDepartments()方法的调用全部通过Struts2提供的拦截器自动实现,无需开发人员作任何的工作。另外,在调用setDepartment()方法进行设值前,Struts2对用户提交的各个信息自动进行类型转换,类型转换不成功时自动将错误提示信息封装为字段级别的错误信息,并自动显示在相应的Struts2表单域标签上面。可见,对于客户端和后台数据的交互、以及类型的转换等常规功能Struts2都已帮我们实现了,因而可以很大程度上提高我们的开发效率。

4 结束语

MVC模式具有一个模型对应多个视图、业务逻辑和显示逻辑分离、不同组件被分隔在不同的层中等特点,这些特点为软件开发提供了许多优良性能,诸如:模块耦合度低,可扩展性、可维护性和代码重用性都比较高。开发高校科研管理系统的实践证明,使用基于MVC模式的Struts2框架,可以有效保障软件可扩展、可维护性安全性等软件质量,同时通过使用Struts2所提供的基础功能以及Struts2标签和OGNL表达式等技术还可以简化系统的开发,极大的提高开发效率。

参考文献

[1]聂常红,唐远强.基于Struts2的Web应用开发研究[J].现代计算机,2014(22):52-57.

[2]司飙.MVC模式下的考试系统建模研究[J].计算机科学,2013,40(6A):403-406.

[3]王雅琳,周颖,雷友诚,桂卫华.基于MVC的调车作业计划辅助编制系统[J].计算机工程,2010(36):257-259.

[4]刘冠川,初元萍.MVC框架在大亚湾中微子实验在线安全培训系统中的应用[J].核电子学与控测技术,2011(31):391- 394.

[5]冯万兴,陈家宏,刘博,王海涛.基于MVC的雷电信息系统设计[J].武汉大学学报(理学版),2009,55(6):728-732.

[6]徐识博,张杰,袁涛,曹开雄,王运对.MVC模式在上海市家业科学院庄行综合试验站信息管理平台的应用[J].中国家学通报,2012,28(06):283-287.

[7]边霞,赵奎,胡晓勤,赵辉.基于MVC的文件备份后台管理系统的设计与实现[J].计算机工程与设计,2011(32):3195- 3198.

作者单位

上一篇:ssh框架范文 下一篇:spring框架范文