MVC模式

2024-05-14

MVC模式(共12篇)

MVC模式 篇1

0 引言

所谓设计模式,本文的理解是:程序由前人积累下来的一些可行解决方法,而程序的设计模式决定了程序各方面最终的性能。本文将FLASH特有的属性和ASPX相结合,创建了双MVC的设计模式。无论在安全性,还是在程序易用性、可维护性、可拓展性上都有了很大提高。

MVC英文即Model-Vi ew-Cont r ol l er,即把一个应用的输入、处理、输出流程按照Model、Vi ew、Cont r ol l er的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。

模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。业务模型还有一个很重要的模型那就是数据模型。数据模型主要指实体对象的数据保存(持续化)。

视图(Vi ew)代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Appl et。

控制(Cont r ol l er)可以理解为从用户接收请求,将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多个模型。

MVC是一种目前广泛流行的软件设计模式,也逐渐在PHP和Col d Fus i on开发者中得到运用,并有增长趋势。随着网络应用的快速增加,实践已经证明MVC模式对于Web应用的开发无疑是一种非常先进的设计思想,无论选择哪种语言,无论应用多复杂,它都能为理解分析应用模型提供最基本的分析方法,为构造产品提供清晰的设计框架,为软件工程提供规范的依据。

1 MVC设计模式的优点

MVC要求对应用分层,这虽然要花费额外的工作,但使得产品的结构清晰,产品的应用通过模型也可以得到更好地体现。其优点可以表述如下:

(1)MVC具有多个视图对应一个模型的能力。在目前用户的需求快速变化下,可能有多种方式访问应用的要求。按MVC设计模式,一个订单模型以及多个视图即可解决问题。这样就减少了代码的复制,也减少了代码的维护量,即一旦模型发生改变,也易于维护。

(2)由于模型返回的数据不带任何显示格式,因而这些模型也可直接应用于接口的使用。

(3)由于一个应用被分离为三层,因此有时改变其中的一层就能实现应用的改变。一个应用的业务流程或者业务规则的改变只需改动MVC的模型层。

(4)控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起完成不同的请求,因此,控制层可以说是包含了用户请求权限的概念。

(5)有利于软件工程化管理。由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化产生管理程序代码。

2 利用FLASH特性搭建双MVC设计模式

传统B/S架构下的应用程序,客户端、WEB服务器、数据库服务器是一种经典的MVC模式。如图二所示:

FLASH应用程序本身则可以看成是另外一个完整的MVC模式,在界面上的MOVI E CLI P和组件是视图;ACTI ONSCRI PT中的程序逻辑对键盘和鼠标的反应是控制器,连接外部数据的对象(如XML对象或Load Var s对象)或主件(如XMLConnect or或Web Ser vi ce Connect or)是模型。

值得注意的是:FLASH应用程序要决定哪些部分属于视图和模型时比较明显,控制器的定位则比较模糊。有时,应用程序甚至不需要控制器;在JAVA或FLASH的大部分情况中,视图和控制器往往会合并为一个对象,视图类以组合关系包含控制器类。如何将应用程序分为模型、控制器和视图这三个部分,每个人的做法都是不同的,没有绝对答案。

参考文献

[1]张亚飞,何锋镝.精通Flash MX结构化设计和开发[M].北京:科学出版社,2003.

[2]刘海疆,毛潮钢.Flash MX制作完整实例[M].北京:海洋出版社,2003.

[3]李兵,来宾.Flash MX高级应用与实例[M].北京:冶金工业出版社,2003.

MVC模式 篇2

(中南大学信息科学与工程学院,湖南长沙410083 摘 要:在探讨Web 应用开发平台的基础上,提出了基于MVC(Model-View-Cont roller模式的Web 应用平台的开发方法,并详细论述了应用开发平台的核心体系结构、技术实现方案及其关键技术。利用该快速Web 应用开发平台可以迅速搭建企业级的Web 应用,其代价要比利用传统的J 2EE 开发平台低,具有良好的应用前景。关键词:Web 应用平台;MVC 模式;应用逻辑组件框架;对象-关系映射基础组件

中图法分类号:TP31;TP 393 文献标识码: A 文章编号:1001-3695(200411-0204-03 Design a nd Im plem ent ation of Rapid Web Applicat ion Plat form Based on M VC Pat t ern WAN G Yu,WAN G J ia n-xin,J IAN G N an,WAN G Bin(C ollege of Information S cience &E ngineer ing,Centr al South Univers ity,Changsha H unan 410083,C hina Abst ract :Introduces developm ent t echnique a bout MVC pa tt ern ra pid Web applica tion plat form on t he bas is of exploreing Web a pplication plat form a nd det ailedly discusses it ’s kernel architect ure,technic reliz at ion schem e and key t

echnologies.B ased on this ra pid Web a pplicat ion developm ent pla tform ,the ent erprise Web applica tion ca n be cons truct ed quickly,a nd it s cost is fewer t ha n t ra dit iona l J 2EE dev elopm ent pla tform ,so it ha s glorious pros pect.Key wo rds:Web Applica tion P lat form;M VC P at tern;Applica tion Log ic Fram ework;Object-Relat ional Mapping C om po-nent近年来,随着网络技术和Internet 的迅速发展,基于B/S 模式的Web 应用,因其具有易用性、通用性和良好的可扩展性等优点而发展迅速,正逐渐成为企业应用信息系统市场的主流。但是,当前基于J ava 的Web 应用软件开发过程中,还存在如下一些不尽人意的地方

[1] :(1程序可重用程度很低。多个项目常常有功能类似的部分,但由于设计之初没有考虑到或不能深入考虑,导致程序虽然类似却不能重用,只能重写的局面。完成一个项目积累下来的只有经验而没有代码,造成工作量的浪费。

(2维护工作烦琐困难。即使不考虑由于需求模糊造成的追加,项目后期维护仍然烦琐。用户的几乎任何一点修改都需要程序员参与才能够完成,而这类维护中有近一半以上的修改都只需要非常简单的改动就可以完成。

(3程序应变能力较弱。由于当前应用软件的业务和用户均不够成熟,需求的变化就是一个客观存在的必然事实,而目前应用软件的应变能力无论从技术体系还是程序编码都不够强,这也导致了维护工作的困难。

为了能够有效地提高Web 应用程序的可重用性、可维护性和可扩展性等方面,我们结合MVC(Model-View-C ontroller,模型-视图-控制器模式来设计一个基于J 2EE 技术的Web

应用开发平台,它能够提供大量的高度抽象且功能强大的基础组件框架;特别地,它还能提供丰富灵活的客户化程序和应变体系。基于这个Web 应用开发平台用户或程序员可以快速地编写出自己的应用软件项目或产品

[2]。平台的体系结构与实现方案 1.1 We b 应用平台的中心体系结构 图1 Web 应用平台的中心体系结构

图1说明了Web 应用平台的中心体系结构的各个组件,每个服务器代表所提供的服务。服务器实际可能位于同一机器,或对于大型的Web 主机设备而言,可能存在几个各自执行相似任务的服务器。这类Web 应用体系结构的长处之一是大部分的Web 应用程序可以通过向用于传输应用程序的服务器组或Web 区添加更多机器,升级以支持更多用户。该Web 应用平台体系结构中各部分的内容有:(1Web 浏览器客户机。在Web 应用程序中,用户接口通

过一个Web 浏览器进行传输。浏览器理解的主要语言是超文本标记语言HTML,大部分当前浏览器还具有执行JavaScript ・402・计算机应用研究2004 年 因特

网 因特网防

火墙

网络服务器 企业防火墙 应用程序服务器 数据库 服务器 企业计算资源

和J a va的内置能力。当前主要应用的浏览器有IE,Nets cape 和Opera等。(2Web服务器。它处理HTTP请求,并确定如何生成一个请求响应。在本体系结构中,Web服务器用于响应静态Web页,把请求传递到一个应用程序服务器,以及接收应用程序服务器的返回内容以生成响应内容。当前的平台采用主流的Apache服务器作为Web服务器。

(3应用程序服务器。该平台是基于J2EE的架构,应用程序服务器包括服务程序引擎和EJ B容器。本平台是基于J2EE架构的轻量级Web应用实现,主要采用服务程序引擎部分来实现应用逻辑。服务程序引擎还提供对J S P的支持,J S P 是与平台和Web服务器无关的。该平台采用的服务程序引擎来自Apache的应用服务器Tom cat4.1.12。

(4数据库服务器。在该体系结构中,数据库可以通过运行EJ B或服务程序的J DB C API程序调用进行访问。该平台的数据库服务器采用MS S QL S erv er2000。

(5传统遗留系统。该平台采用的J av a技术是将不同系统连接在一起的应用程序的理想平台。J DBC允许建立大量通用数据库的统一数据库连接,J a va消息服务(J MS是实现提供消息中介服务标准化接口的良好起点,J a va与XML及简单对象访问协议(S OAP的组合可以提供从支持不同语言和通信机制的各种系统到传统应用程序的访问。

(6防火墙。防火墙及代理了限制应用程序在随机套接字上通信的能力。如果客户机上的代码需求独立于浏览器之外与服务器通信,则该通信应采用HTTP或HTTPS协议。

1.2 Web应用平台的技术实现方案

Web应用平台的程序结构是基于MVC模式来实现的。M VC模式中包括三类组件:Model组件用于描述应用程序中的数据以及操作该数据的方法,与用户界面无关;View组件负责将数据展现给用户;Cont roller组件将用户操作翻译为对Model 组件的操作。接到C ontroller传来的操作之后,Model再更新View,以反映出数据的变化[3]。

Web应用平台的技术实现主要采用J S P,J a va S ervlet,J a-vaB ea ns和J DBC等技术来实现基于J2EE架构的轻量级Web 应用的开发。其中,通过J DBC进行数据库访问的J a va Bea ns 代表模型(数据,S ervlet充当控制器(处理请求,J S P页面则是模型的视图[4]。

图2 Web应用平台的程序结构

如图2所示,Web浏览器发出HTTP请求后,通过Web服务器接收后传递,然后由应用服务器中的服务引擎调用操作S ervlet来处理,操作S ervlet再将请求调至J avaBeans,即操作B ea n。操作B ea n更新代表业务对象模型的数据B ean,并向操作S ervlet返回一个操作路径选择器。操作S ervlet利用这个路径选择器将请求转发或

重定向至J S P页面,接着,J S P页面访问通常具有定制标记的业务对象,并向浏览器发回响应。

2平台的主要功能与组成内容

Web应用开发平台作为Web应用系统开发的通用化基础平台,其主要的功能要求有:(1将数据建模、数据显示与用户交互三者分开,使得程序设计的过程更清晰;(2简化程序扩展时的副作用分析,从而提高系统的可扩展性;(3将应用程序的功能封装在众所周知的API后面,提高系统的可维护性,减少重复代码,将应用程序的功能和数据表现分开,提高可复用程度;(4提高系统的灵活性,把数据模型、用户交互和数据显示等部分设计为可接插组件;(5可以用于部分发布,支持渐近式升级;(6提供自定义的系统通用组件集,包括改善数据库访问性能的连接池组件,用于应用程序错误处理的组件以及其他实现通用化的用户与权限管理等组件。

开发平台的内容包含一系列互相合作的类、Servlet控制程序、JSP定制标记库以及一些实现通用化功能的组件集,它们共同组成了可重用的基于MVC的框架。

开发平台主要由以下几个部分组成:表示控制器(Control-ler部分的Web应用逻辑组件框架,表示视图(View部分的Web用户界面组件框架,表示模型(Model部分的对象-关系映射(ORM的基础组件,以及有关的JSP定制标记组件库和其他通用化组件集。

3平台设计与实现的关键技术

(1控制器功能的Web应用逻辑组件框架的设计与实现

从JSP页面或Servlet调用中接收请求,调用相应的操作Bean及数据Bean实现应用逻辑处理,最后再转移到其他的JSP页面或Servlet调用的操作。应用逻辑框架中包括四种类型的对象: ●Action(接口实现此接口的应用程序的特定操作;●ActionFactory(类生成操作实例;●ActionServlet(Servlet将请求映射到操作;●ActionR outer 将请求转发或重定向至JSP页面。

应用逻辑框架中的对象类型在运行过程中的协作关系如图3所示。一般情况下,可以从JSP页面或另一个Servlet调用操作Servlet(ActionServlet,作为表单提交或链接激活的结果。根据请求的类型,该Servlet重新检索相应的操作类型。操作Servlet(ActionServlet从操作库中获得一个操作后,它便调用此操作的Perform方法,Perform方法实现了特定应用程序的功能,通常用于更新业务对象。Action.perform返回一个操作路径选择器,它具有一个URI和Boolean变量,指示是否将请求转发或重定向至这个URI。操作Servlet使用操作路径选择器调用路径选择器的Route方法,Route方法将请求转发或重定向到适当的Web组件[5,6]。

基于框架增加应用开发时,可以考虑按以下几步实现:①实现Action操作,使其能操作业务对象模型,而且可能在适当

・ 5 2 ・

第11期王禹等:基于MVC模式的快速Web应用开发平台的设计与实现

浏览器 操作Servlet(控制器 4.返回操作路径 JSP页面(视图

5.转发或重定向 1.请求 7.响应 操作Bean 2.调度请求 3.更新 的范围内为J S P页面(视图存储B ea n,以便访问;②实现J S P 页面,使其能访问业务对象以及特定范围内的B ea n;③增加到应用程序属性文件的映射,以便使上述产生的操作及页面与逻辑名等同。

图3 Web应用逻辑组件框架中对象类型的协作顺序图(2模型功能的对象-关系映射的基础组件的设计与实现

通过数据Bean来存取后台数据库的相应数据,即将J a va 对象映射到数据库表中,也就是要创建一个J ava对象来代表数据库表的其中一行,然后初始化它的各个域,并且通知对象将其添加到数据库中。此即对象到关系映射技术(Object-Re-la tional

Ma pping,ORM。平台的ORM基础组件设计一个基础类,要能够简化数据Bean代码的一个抽象数据库对象类。并且,每一个映射到数据库表的J ava类必须能够提供它们自己的添加、更新和删除语句,同时还必须能够从ResultS et对象中读出各个域。该抽象类Dat aba seObject的概要说明如下: public abstr act class Da tabaseObject{ public Vector g etAll(Connection connthrows S QLEx ception{} public Vector getAll(Connection conn,Str ing w hereC lausethrow s S QLException{} //返回表中符合条件的所有对象

public Vector getAll(Connection conn,S tring whereCla use,Str ing addi-tionalTablesthrows SQLException{} //执行一个指定连接的查询串

public Vector executeQuer y(Connection conn,Str ing quer ythrows S QLE xception{} //插入对象到数据库中

public int insert(Connection connthrows S QLException{} //返回表中用于S elect的字段列表 public abstr act Str ing getFieldList(;public Str ing getFieldList(S tring tableName{};public abstr act Str ing getInser tStatement(;public abstract void prepar eInsertStatem ent(Pr epar edS tatement s throw s S QLE xception;

//修改数据库中的对象

public int update(Connection connthr ows SQLException{} public abstr act Str ing getUpdateS tatement(;public abstract void prepareUpdateS tatement(PreparedStatem ent s throw s S QLE xception;//删除数据库中的对象

public int delete(Connection connthrows S QLException{} public abstr act Str ing getDeleteS tatement(;public abstract void pr epar eDeleteStatem ent(PreparedStatement s throw s S QLE xception;public abstr act Str ing getTableName(;public abstr act DatabaseObject createInstance(ResultS et r esults throw s S QLE xception;} 所有业务应用需要的数据B ea n都可以从这个抽象对象基础类上继承出来,再结合具体的要求进行相应的扩展。

(3视图功能的Web用户界面组件框架的设计与实现

HTML表单用于Web应用程序,而用户界面框架(如Sw ing和AWT用于传统软件,页面制作者使用表单而不是用户界面工具包来创建用户界面。所以,为Web应用的开发提供一个类似传统软件用户界面框架的Web用户界面组件框架,这样的作用是能够大大提高Web应用界面开发中的代码重用,也给开发人员提供了一个界面开

发中能不断扩展的基础平台。在Web应用表示层的视图部分,J S P规范没有直接支持表单,Web应用平台在此基础上实现Bea n表单框架,也就是开发平台的Web用户界面框架。而且J SP没有提供界面工具中类似于组件、容器或布局管理器的对象。但是J S P具有定制标记和包含Web组件的能力两个特色,利用这两个特色,可以实现定制的组件、容器和布局管理器。所以,Web应用平台通过设计节点、区域和模板实现网页的基础组件来实现可扩展的、可重用的和可维护的Web应用的界面部分。

(4平台的J S P定制标记组件库和其他通用化组件集的设计与实现

它包括用于优化数据库访问效率的数据库连接池,系统初始化设置、客户端的显示、上传下载与页面显示分页等通用控制组件,以及实现加密解密、第三方打印组件和通用的系统用户与功能权限管理模块等内容。基于该平台的Web应用开发过程中,可以直接使用上述公用组件所提供的通用化功能,从而减少了开发Web应用系统的工作量。

4结束语

基于MVC模式的Web应用平台具有如下特点:能够快速完备地搭建Web应用系统;采取设计模式来扩展显示逻辑、应用逻辑以及数据模型的复用度;结合区域与模板重用的定制JSP页面;提供优化数据库访问的连接池以及丰富的、通用的工具组件。通过实践证明,基于此通用化平台开发的Web应用系统能够具有以下的优良特点:使应用程序模块化;减少了HTML和Java代码的相关性;允许开发人员为相同的数据提供多个视图;简化了应用程序流程,使得应用程序更易维护,是一种进行Web应用开发的可靠模型。

参考文献: [1]蒋步星.Web应用软件开发平台ExPl atO-Web[C].全国第四届 Java技术与应用交流会,2001.285-288.[2]齐勇,等.基于Web的中间件系统集成框架———应用服务器的 研究[J].计算机研究与发展,2001,38(4:430-437.[3]姚慧广,赵岳松.Web编程中MVC模型的应用[J].微机发展, 2002,11(3:9-10.[4]何成万,余秋惠.MVC模型2及软件框架Struts的研究[J].计算 机工程,2002,28(6:274-281.[5]王斌,王建新,张尧学,等.基于通信的MAS内部自动服务协商 [J].小型微型计算机系统,2003.[6]王斌,张尧学,陈松乔.分布式环境下代理协同的主动黑板结构 设计模式[J].计算机工程,2003.作者简介: 王禹,男,硕士研究生,主要研究方向为网络信息系统;王建新,男,教授,博士,主要研究方向为计算机网络理论;江南,男,硕士,主要研究方向为软件工程;王斌,男,博士,主要研究方向为组件技术。

・ 6 2 ・计算机应用研究2004年

JSP或Servlet ActionServlet ActionFactory Hashtable Class Action ActionRouter

MVC模式 篇3

“MVC”(Model-View-Controller)由Trygve Reenskaug提出,首先被应用在SmallTalk-80环境中,是许多交互和界面系统的构成基础。MVC作为一种开发模型,通常用于分布式应用系统的设计和分析中,以及用于确定系统各部分间的组织关系。对于界面设计可变性的需求,MVC把交互系统的组成分解成模型、视图、控制器三种部件。

模型(Model)部件保存由视图显示,由控制器控制的数据;它封装了问题的核心数据、逻辑和功能的计算关系,它独立于具体的界面表达和I/0操作。视图(View)部件把表示模型数据及逻辑关系和状态的信息以特定形式展示给用户。它从模型获得显示信息,对于相同的信息可以有多个不同的显示形式或视图。

控制器部件是处理用户与软件的交互操作的,其职责是控制提供模型中任何变化的传播,确保用户界面于模型间的对应联系;它接受用户的输入,将输入反馈给模型,进而实现对模型的计算控制,是使模型和视图协调工作的部件。

二、MVC设计模式在ASP.NET中的实现

ASP.NET提供了一个很好的实现这种经典设计模式的类似环境。开发者通过在ASPX页面中开发用户接口来实现视图;控制器的功能在逻辑功能代码(.cs)中实现;模型通常对应应用系统的业务部分。

视图是模型的表示,它提供用户交互界面。在ASP.NET下,视图的实现很简单。可以像开发WINDOWS界面一样直接在集成开发环境下通过拖动控件来完成页面开发本。视图部分处理流程:首先,页面模板定义了页面的布局:页面配置文件定义视图标签的具体内容;然后,由页面布局策略类初始化并加载页面;每个用户部件根据它自己的配置进行初始化,加载校验器并设置参数,以及事件的委托等;用户提交后,通过了表示层的校验,用户部件把数据自动提交给业务实体即模型。

为了能够控制和协调每个用户跨越多个请求的处理,控制机制应该以集中的方式进行管理。因此,为了达到集中管理的目的引入了控制器。应用程序的控制器集中从客户端接收请求(典型情况下是一个运行浏览器的用户),决定执行什么商业逻辑功能,然后将产生下一步用户界面的责任委派给一个适当的视图组件。

控制器提供一个控制和处理请求的集中入口点,它负责接收、截取并处理用户请求;并将请求委托给分发者类,根据当前状态和业务操作的结果决定向客户呈现的视图。在这一部分主要定义了HttpReqDispatcher(分发者类)、HttpCapture(请求捕获者类)、Controller(控制器类)等,它们相互配合来完成控制器的功能。请求捕获者类捕获HTTP请求并转发给控制器类。控制器类是系统中处理所有请求的最初入口点。控制器完成一些必要的处理后把请求委托给分发者类;分发者类分发者负责视图的管理和导航,它管理将选择哪个视图提供给用户,并提供给分发资源控制。在这一部分分别采用了分发者、策略、工厂方法、适配器等设计模式。

MVC系统中的模型从概念上可以分为两类——系统的内部状态和改变系统状态的动作。模型是你所有的商业逻辑代码片段所在。

三、MVC模式的优缺点

1、MVC模式的优点

通过在ASP.NET中的MVC模式编写的,具有极其良好的可扩展性。它可以轻松实现以下功能:①实现一个模型的多个视图;②采用多个控制器;③当模型改变时,所有视图将自动刷新;④所有的控制器将相互独立工作。

2、MVC模式的不足

①增加了系统结构和实现的复杂性。对于简单的界面,严格遵循Mvc,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。

②视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。

③视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

四、结束语

与软件所处理问题的内在模型相比较,用户界面是需要经常发生变化的,采用MVC设计模式可以在满足对界面要求的同时,使软件的计算模型独立于界面的构成。也可以基于此模型建立大型分布式应用程序框架。

浅谈MVC框架模式 篇4

MVC模式是"Model-View-Controller"的缩写, 中文翻译为"模式-视图-控制器"。MVC应用程序总是由这三个部分组成。

(1) 视图 (View) :视图是用户看到并与之交互的界面。对老式的Web应用程序来说, 视图就是由HTML元素组成的界面, 在新式的Web应用程序中, HTML依旧在视图中扮演着重要的角色, 但一些新的技术已层出不穷, 它们包括Macromedia Flash和像XHTML, XML/XSL, WML等一些标识语言和Web services。

(2) 模型 (Model) :模型表示企业数据和业务规则。在MVC的三个部件中, 模型拥有最多的处理任务。例如它可能用像EJBs和Cold Fusion Components这样的构件对象来处理数据库。被模型返回的数据是中立的, 就是说模型与数据格式无关, 这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用, 所以减少了代码的重复性。

(3) 控制器 (Controller) :控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时, 控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求, 然后确定用哪个视图来显示模型处理返回的数据。

以MVC为框架的Web应用如图1所示:

1.1 MVC框架模式的优点

(1) 可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化, 从而使所有关联的视图和控制器做到行为同步。

(2) 视图与控制器的可接插性, 允许更换视图和控制器对象, 而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。

(3) 模型的可移植性。因为模型是独立于视图的, 所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。

(4) 潜在的框架结构。可以基于此模型建立应用程序框架, 不仅仅是用在设计界面的设计中。

1.2 MVC框架模式的缺点

(1) 增加了系统结构和实现的复杂性。对于简单的界面, 严格遵循MVC, 使模型、视图与控制器分离, 会增加结构的复杂性, 并可能产生过多的更新操作, 降低运行效率。

(2) 视图与控制器间的过于紧密的连接。视图与控制器是相互分离, 但确实联系紧密的部件, 视图没有控制器的存在, 其应用是很有限的, 反之亦然, 这样就妨碍了他们的独立重用。

(3) 视图对模型数据的低效率访问。依据模型操作接口的不同, 视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问, 也将损害操作性能。

(4) 目前, 一般高级的界面工具或构造器不支持模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的, 从而造成MVC使用的困难。

2 现有的MVC框架

MVC在J2EE里已经广泛使用, 并不断有新的MVC框架发布。目前最流行的MVC框架Struts和Spring MVC。

2.1 Struts

Struts是Apache基金会Jakarta项目组的一个Open Source项目, 它采用MVC模式, 能够很好地帮助java开发者利用J2EE开发Web应用。和其他的java架构一样, Struts也是面向对象设计, 将MVC模式"分离显示逻辑和业务逻辑"的能力发挥得淋漓尽致。Structs框架的核心是一个弹性struts的控制层, 基于如Java Servlets, Java Beans, Resource Bundles与XML等标准技术, 以及Jakarta Commons的一些类库。Struts由一组相互协作的类 (组件) 、Servlet以及jsp tag lib组成。基于struts构架的web应用程序基本上符合JSP Model2的设计标准, 可以说是一个传统MVC设计模式的一种变化类型。

2.2 Spring MVC

Spring框架提供了构建Web应用程序的全功能MVC模块。使用Spring可插入的MVC架构, 可以选择是使用内置Spring Web框架还可以是Struts这样的Web框架。通过策略接口, Spring框架是高度可配置的, 而且包含多种视图技术, 例如Java Server Pages (JSP) 技术、Velocity、Tiles、i Text和POI。Spring MVC框架并不知道使用的视图, 所以不会强迫您只使用JSP技术。Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色, 这种分离让它们更容易进行定制。

3 结语

当今社会对于软件开发是一个分工很细的工作, 在开发过程中不同的人负责不同的模块开发, 比如有专门的人负责业务逻辑, 有专门的人负责图形界面, 所以现在的开发人员都是某一方面的专家。引入MVC模式之后, 逻辑层与表现层分离开来, 业务逻辑不再关心具体的显示层面, 逻辑层的代码量消除了膨胀隐患, 表现层也可交由其它非业务人员自由调整, 最后完美整合, 在层次分工上, 比传统模式更加清晰, 利于维护, 在项目有升迁移植改造需求时, 由于业务逻辑层不与表现层直接关联, 故可直接使用已有的业务逻辑, 大大减少了重构成本。越大的项目中MVC的作用表现的越明显。

参考文献

[1]张红实, 何桂兰.Java Web应用开发[M].北京:电子工业出版社, 2010.

ASP.NET MVC总结 篇5

一、概述

1、单元测试的NUnit, MBUnit, MSTest, XUnit以及其他的框架

2、ASP.NET MVC 应用的默认目录结构有三个顶层目录: Controllers、Models、Views,控制器类置于 /Controllers 目录之中,数据模型类置于/Models目录之中,视图模板置于 /Views 目录之中。

ASP.NET MVC框架并不强迫你总是使用这个结构。

二、URL映射到Controller类

1、把URL映射到Controller类

在大多数web框架(ASP, PHP, JSP, ASP.NET WebForms等等)里,到来的URL一般都映射到保存在硬盘上的模板文件。

MVC框架一般以不同的方式把URL映射到服务器代码类(Controllers(控制器))上,这个类负责处理到来的请求,处理用户输入和交互,执行基于输入和交互的相应的应用和数据逻辑。然后,一个Controller类调用单独的“视图”组件,该组件负责生成请求的实际的HTML输出。

在如何把URL映射到Controller类方面,该引擎提供了很多灵活性。

ASP.NET MVC URL映射routing引擎的路径选择规则:(1)选出一个Controller来运行。(2)把URL里定义的变量,传递给Controller的Action。

2、映射到控制器类的默认ASP.NET MVC URL Routing规则

当你创建一个MVC项目时,默认的路径映射规则拥有这样的格式:“/[controller]/[action]/[id]”。

(1)controller:把Url的开始部分映射到类上,该类名称遵循UrlPathController的模式。

(2)action:controller里的action方法。ASP.NET框架根据URL routing规则来自动调用适当的action方法来执行。还可以覆盖Controller基类中的“Execute”方法,手工编写我们自己的 if/else/切换逻辑,对照用户请求的URL,然后执行适当的逻辑来处理这个请求。

(3)id:如果URL中在控制器名称和action名称之后还有任何子路径的话,在默认情形下,它将作为一个名为“id”的参数处理,会自动地作为一个方法参数传给我们的控制器action方法。如果你的action方法有个参数的话,MVC框架会检查进来的请求的数据,看是否有个同样名称的对应的HTTP请求值。如果有的话,它会自动将其作为参数传入action方法。

Controller基类呈现了可以使用的Request 和Response对象,它们是基于接口(interface)的。

3、使用视图显示界面

action方法在调用RenderView()方法时提供的跟视图有关的数据对象,来显示适当的界面:

在上面的代码例子里,RenderView方法的“Categories”参数表示我们要显示的视图名称,第二个参数是我们要传给视图对象并要视图对象据此显示适当HTML界面的分类对象的列表。

ASP.NET MVC框架支持任何模板引擎(包括象NVelocity, Brail,以及你自己想要编写的任何模板引擎)来帮助生成界面。在默认情形下,ASP.NET MVC 框架使用ASP.NET中现有的ASP.NET 页面(.aspx), 母版页(.master), 和用户控件(.ascx)。

4、Controller.RedirectToAction ASP.NET MVC还提供了Controller.RedirectToAction()辅助方法,你可以在控制器里使用来进行转向操作(URL是使用URL路径选择系统计算出来的)。例如,当在控制器里调用下面代码时:

在内部,它会生成一个对Response.Redirect(“/Search/Beverages”)的调用。

二、单元测试 Public void Detail(){ ProductsController controller=new ProductsController();//ProductsController里注入了一个伪(dummy)“ViewFactory”实现的。覆盖了默认的ViewFactory,否则,默认的ViewFactory会创建和显示我们的视图。我们可以使用这个测试ViewFactory实现来做隔离,TestViewEngine testView=new TestViewRngine();Controller.viewFactory=testView;Controller.Detail(3);Assert.AreEqual(typeof(Product),testView.View.ViewData.GetType(),”Product object passed to View”)

Assert.AreEqual(3,testview.view.GetViewData().ProductID,”Correct Product object Passed to view”);

Assert.AreEqual(“Detail’,testView.View.ViewName,”Correct View Readered”); }

三、View

1、理解/Views目录结构

Shared:存放公用的母版页、用户控件和视图的地点。ControllerName(控制器名):控制器所用的视图。执行过程:当在Controller中调用 RenderView(string viewName)方法时,MVC框架会自动地首先在ViewsControllerName 目录里寻找对应的.aspx 或.ascx视图模板,如果它找不到适当的视图模板,然后它会在 ViewsShared目录寻找。

2、视图

MVC视图页默认是从System.Web.Mvc.ViewPage 基类继承而来的,该基类提供了构建界面时所用的许多特定于MVC的辅助方法和属性。ViewPage的其中一个属性名叫“ViewData”,通过它,可以访问Controller作为参数传给 RenderView()方法的特定于视图的数据对象。从你的视图里,你可以后期绑定或以强类型的方式访问“ViewData”。如果你的视图是从ViewPage继承而来,那么ViewData属性是个后期绑定的字典。如果你的视图是从基于泛型的ViewPage继承而来,其中T表示Controller传给视图的ViewData的数据对象的类型,那么ViewData属性就是强类型的,匹配你的Controller传入的数据的类型。显示数据: 1)在.aspx 文件里使用行内代码

使用

和 的句法来在html 标识内嵌入显示代码

2)在.aspx 文件中使用服务器控件,然后在后台代码里使用数据绑定。

9、Html对象是 ViewPage 基类的一个辅助属性,ActionLink方法是它的一个辅助方法,它方便你动态地生成连回到控制器的action 方法的HTML超链接。

第一个参数表示要显示的超链接的内容,第二个参数是个匿名对象,它代表用以生成实际URL的一串值,你可以认为它是生成字典的一个比较干净的方式。如果routing规则是象这样的: /// 那么在ProductController的Category视图里编写这样的代码时:

Url.Action 除了使用Html.ActionLink外,ASP.NET MVC还有个Url.Action()视图辅助方法。该方法生成原生的字符串URL,然后你可以任何方式来使用它们。例如,下面的代码片段:

会使用URL路径选择系统返回下面这个原生的URL(而不是包装在元素里):

使用Lambda表达式从路径选择系统构建输出的URL ASP.NET MVC框架还支持使用强类型机制创建action路径的能力,这些强类型机制为URL辅助方法提供了编译时检查和intellisense。这是通过使用泛型和新的VB和C#对Lambda表达式的支持来实现的。下面这个匿名类型 ActionLink 调用:

也可以写成:

方法 1:使用 Controller.ViewData 字典来传递ViewData Controller基类有个ViewData字典属性,可以用来填充你要传给视图的数据。你使用键/值模式将对象加入 ViewData 字典。

ViewPage基类提供一个ViewData字典属性,我们可以在视图网页里访问由控制器添加的数据对象。然后我们可以取出这些数据对象,使用它们来显示HTML输出,可以用服务器控件的方式,或者用

显示代码的方式。注: 因为ViewData的类型是含有“objects”的字典,为了对它使用foreach语句,我们需要将ViewData[“Products”]的类型转换成 List 或者 IEnumerable。我在页面上引用了System.Collections.Generic 和 MyStore.Models 命名空间 以避免输入 List 和 Product 类型的完整名称。注: 上面使用了“var”关键词,这是VS 2008中新的 C# 和 VB “类型推断”特性的一个例子(在这里阅读我以前的相关贴子)。因为我们将ViewData[“Products”] 转换成了 List,我们在 List.aspx 文件中的 prduct 变量上得到了完整的intellisense。

方法 2:使用强类型类来传递ViewData

在第一个预览版中,只有“ActionLink”方法是内置于System.Web.Extensions(目前实现核心ASP.NET MVC框架的程序集)中的。但我们还将有一个单独的 “MVCToolkit” 下载,你可以加到你的项目中,来得到你可以在第一个预览版中使用的的几十个辅助方法。要安装MVCToolkit HTML辅助方法的话,只要将MVCToolkit.dll程序集添加为你的项目的引用即可。Html.Select()Html.TextBox(“”,ViewData.Product.unitPrice)MVCToolkit程序集,你可以利用在System.Web.Mvc.BindingHelpers命名空间下实现的一个有用的扩展方法,来对此代码作些清理。这个扩展方法叫做“UpdateFrom”,可以用在任何.NET 对象上。它接受一个字典作为参数,然后,它会对任何匹配该对象的公开属性的键,自动对本身进行属性赋值。Product product=new Product();Product.UpdateFrom(request.Form);//把客户端的数据填充到product对象中了。

注: 如果你因为安全的原因,想要更明确些,只允许某些属性可以更新的话,你还可以向UpdateFrom方法传入一个可以更新的属性名称的字符串数组:拦截器(Action Filter)

1、横切于ASP.NET MVC执行过程。在ASP.NET MVC执行中提供扩展功能(HttpModule)。可作“任何”事件(日志、缓存、异常处理)

2、成员:

(1)OnActionExecuting:参数ActionExecutingContext(ActionMethod、ActionParameters、Cancel、Result)。身份验证、输出服务器端缓存。(2)OnActionExecuted:参数ActionExecutingContext(ActionMethod、Exception、ExceptionHandled、Result)。异常处理(3)OnResultExecuting:参数ResultExecutingContext(Cancel、Result)。设置客户端缓存、服务器端压缩。

(4)OnResultExecuted:参数ResultExecutingContext(Exception、ExceptionHandled、Result)。异常处理、页面尾部输出调试信息。(5)Order(调用顺序)实现与使用:继承ActionFilterAttribute类、覆盖必要的方法、标记在需要操作的Action上。IActionFilter(PV4):

ActionFilterAttribute:FilterAttribute、IActionFilter、IResultFilter。

HandleErrorAttribute:FilterAttribute、IExceptionFilter。IResultFilter(PV4): IExceptionFilter(PV4):验证 IAuthorizationFilter:授权

3、发布预制过滤器(PV4):

OutputCache:缓存输出,VaryByParam:根据指定参数进行。缓存整个页面。

HandleError:捕获特定异常,可指定出错View(默认为Error),View查找顺序:Controller目录àShared目录。[handleError(ExceptionType=type(SqlException,View=””))] Authorize:授权。

MVC模式 篇6

【摘 要】针对某单位年假审批过程繁復,信息不透明,审批效率低下及传统web技术开发效率低下的问题,提出了基于ExtJs技术的MVC模式的年假审批系统的设计思路,给出了系统的MVC架构及ExtJs技术的B/S开发模式和应用实例,设计了系统功能模块以及人员数据结构及其搜索思路。对系统进行了实现和测试,结果表明ExtJS能提高开发效率,有助于提高系统的可维护性。

【关键词】ExtJs MVC 权限管理 审批管理 人事树

1 引言

单位年假审批过程繁杂,需要层层领导审批签字,浪费了大量人力;信息透明度低,只在公示栏小范围公示,不能面向全体员工;员工提出纸质申请,一旦出错,需要重新修改打印,再次申请,审批效率低下。针对以上问题,开发年假审批系统不仅能节省人力物力,还能提高工作效率和透明度。

传统的WEB前端技术存在一些不足,如:需要写大量的前端的HTML代码,在设计和布局上需要花费很长的时间去设计和思考,开发时间较长。Extjs具有如下优点:

(1)无需管理HTML,CSS等放置组合,布局设计等繁琐的问题,一切只需要调用ExtJS的组件库,ExtJs能够动态的生成HTML,CSS。

(2)开发时间短,只需要调用ExtJS的组件库,就能够实现网页中的组件元素。因此设计基于ExtJs技术的MVC模式的年假审批系统具有重要的现实意义。

2 MVC模式及ExtJS设计

2.1 MVC架构设计

MVC即模型(Model),视图(View)和控制(Controller)。MVC模式的目的就是实现Web系统的职能分工。Model层实现系统中的业务逻辑,View层用于与用户的交互,Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图进行显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式,下图1为MVC数据交互图。

2.2 视图层ExtJS设计

ExtJS 作为网页前端的框架技术,搭建前台的WEB页面框架,接收数据的输入与输出,并允许用户操纵。

2.3 模型层存储过程设计

模型层的调用者是控制层,控制层根据不同的视图层的需求调用不同的模型,从而得到相应的数据。本系统中应用SQL Server2005的存储过程作为模型层。

2.4 控制层PHP设计

控制层接受用户的输入并调用模型和视图去完成用户的需求。本系统中,当ExtJS 请求PHP后,首先PHP解析ExtJS发送的命令,然后去数据库请求数据,最后将数据库中处理的数据返回给ExtJS。

3 系统设计与实现

3.1 系统审批流程

本系统完全模拟现实的审批过程,当一个员工提出申请年假后,首先判断年假天数的大小,若小于等于5天,年假单子只需要直属主管审批,若大于5天小于等于10天,年假单子首先需要直属主管审批,然后需要部门总监审批,若大于10天,年假单子需要直属主管、部门总监、副总层层审批,审批流程如下图2。根据申请天数的不同,审批经过的步骤也不同,提高了工作效率。

3.2 系统功能设计

根据系统需求和审批流程,本系统设计的功能模块为身份认证模块、个人模块,各部门信息管理模块,权限管理模块、年假管理模块、年假审批管理模块、年假统计模块。

身份认证模块主要对登录者进行身份验证和权限判断,只有合法用户才能登录成功并能执行其权限范围内的操作。

个人模块主要是个人申请年假和查询年假等功能。

各部门信息管理模块为增加、删除、修改、查询部门信息、岗位信息、和员工信息。

权限管理模块包括增加、删除、修改、查询权限信息,管理员信息,添加、取消权限岗位的映射关系。

年假管理模块为增加、删除、修改年假起始日期,查询年假起止日期以及对特殊人群(公司领导层,或为公司做出重大贡献的人)年假的增删改查。

年假审批管理模块是给那些具有审批权限的人,不同的审批者审批的范围不同,包括审批年假、查看审批日志及流程,查看待审批及已经审批年假。

年假统计模块是对年假的分年统计,可查看员工的详细信息,可查看某段时间内的年假信息。

3.3 系统实现

本系统是基于ExtJs技术设计的年假审批系统,由于篇幅有限,具体的数据库设计及程序代码部分在此不进行展开,仅对系统中涉及的重点问题进行讨论。

系统中最常用的功能为人员的搜索,由于人事关系复杂,本文采用树形结构(满人事树)描述人事关系以便进行搜索,用圆圈表示部门节点,用矩形表示人节点,满人事树结构图如图3所示:

通常应用宽度优先遍历算法求解满人事树结构。首先D1入队,然后D1出队,在_Human_Department(部门表)中,找到ParentId(上级部门)为D1的节点,可以找到D2与D3,D2与D3入队,D1入栈,接着让D2出队,找到ParentId(上级部门)为D2的节点,可以找到D4与D5,D4与D5入队,D2入栈,D3出队,这样一直查找,直到队列为空为止。应用宽度优先遍历算法找到只是部门节点的组织架构,并没有把人节点挂载进去。在人节点挂载中, _Human_Approval_Position_Relation(审批岗位人关联表)可以找到人节点对应的岗位,然后通过表_Human_Position(岗位表)找到岗位对应的部门,这样就找到人对应的部门,然后把人挂载到相应的部门下就可以了。

4 结论

本文研究了MVC模式及ExtJS技术,使用ExtJS技术完成了年假审批系统。本文结合了MVC的开发思想及ExtJS技术设计了系统结构,并给出了MVC的划分思路。应用了权限系统来做访问的控制,及人事树结构进行人员数据存储及搜索。实现了系统并进行了测试,结果表明ExtJS能提高开发效率,此系统具有良好的可维护性。

参考文献:

[1] 卫军,夏慧军,孟腊春. ExtJS Web应用程序开发指南[M]. 北京:机械工业出版社,2011.

[2] David Flanagan. JavaScript 权威指南 第五版[M]. 2007(8)-2010(8). 李强,等译. 北京:机械工业出版社,2007.8.

[3] 徐风.六年PHP征途[J].phper.2007(04).

重构的MVC模式研究 篇7

传统的Java Web开发模式是基于Model2的MVC开发模式。基于这种模式的Web应用的运行逻辑是由一系列的页面切换构成的,每一个页面都是不可分割的最小单元,要更新页面中的数据必须对页面进行整体刷新。AJAX技术的出现,很好的改变了传统的web开发模式,提高了用户体验,它让用户体验的是一种连续的状态,避免了传统的web应用请求-等待-响应的流程,让用户可以连续发送多次异步请求,而无需等待服务器响应。

随着技术的发展,表现层的功能和设计已经变得越来越复杂,现在已经不再是表现层里只有HTML元素。在新的设计中,表现层已经成为了一个跨越Server端和Client端的子系统,既有对UI组件的管理,又有对AJAX通信的封装。它的复杂度甚至已经超过了原本被我们认为是绝对核心的业务逻辑层和持久化层。所以,进一步将MVC设计模式引入到表现层中已经成为一个非常现实的话题。文章阐述了传统MVC模式的特点,并对Ajax新技术的通信机制进行分析,在此基础上提出了重构的MVC模式。

1、传统的Web表现层技术

传统MVC设计模式重新定义了B/S模式结构应用的开发模式,MVC模式规定B/S结构应用应该分成3个部分:Model、View和Controlle, MVC模式分离的数据访问和数据表现,给系统提供了更好的解耦。MVC框架的核心思想是:将程序分成相对独立而又能协同工作的3个部分。通过使用MVC架构,可以降低模块间的耦合,提供应用的可扩展性。MVC的每个组件只关心组件内的逻辑,不应该与其他组件的逻辑混合。

对于B/S结构的应用程序,应用程序状态被保存在服务器端,因此客户端使用B/S结构应用程序是一种请求/响应的程序架构,当客户端的一个请求发送之后,在服务器的响应还未抵达客户端值钱,用户什么也不能做,只能处于等待状态,且看到的是一片空白。

传统的B/S结构的请求是一种独占式的请求,而其每个请求对应一个页面,因此当服务器响应到达客户端时,浏览器都会重新转载该响应,从而导致频繁的页面刷新。因为传统B/S结构应用的每个页面的使用时间都很短暂,因此不可能将该页面制作成丰富的页面。

目前基于MVC模式的web框架层出不穷,虽然各有优点,但都是以独占式的方式请求服务器资源,客户仍然需要等待。

2、Ajax技术介绍:

Ajax并不是一门全新的技术。Ajax所使用的JavaScript, CSS和DOM对象等早已存在。Ajax通过这些传统的对象改善用户的交互体验,让用户能异步发送请求:在浏览页面的同时,向服务器发送请求。

Ajax加入了XMLHttpRequest对象,这个对象提供了与服务器交互的能力,可以异步发送请求,提供与服务器异步通信的能力,无须独占用户在页面上执行的操作。因而,Ajax给用户一种全新的体验。

Ajax技术的出现,改变了传统Web应用的模式,它既是对传统Web应用的完善,也是对传统Web应用的革命。Ajax技术采用异步发送请求的方式代替采用表单提交来更新Web页面的方式,从而揭开了无刷新动态更新页面时代的序幕。Ajax可以成为Web应用开发史上的里程碑。

Ajax应用特别适用于交互较多、频繁读数据、数据分类良好的Web应用。大致上,使用Ajax技术有如下优势:减轻客户端的内存消耗。Ajax的根本理念是"按需取数据",所以最大可能地减少了冗余请求,避免客户端内存加载大量冗余数据。无刷新更新页面。通过异步发送请求,避免频繁刷新页面,从而减少用户的等待时间,提供给用户一种连续的体验。Ajax技术可以将传统的服务器工作转嫁到客户端,从而减轻服务器和带宽的负担,节约空间和带宽租用成本。

Ajax采用了"按需取数据"的模式,这种模式降低了数据的实际读取量,在传统的Web应用里,服务器的每次响应都是一个完整的页面;而在基于Ajax技术的Web应用里,服务器的响应只是必须更新的数据。如果服务器响应数据过大,那么传统Web应用将出现重新加载的白屏;由于Ajax采用异步的方式发送请求,页面的更新由JavaScript操作DOM完成,因此,在读取数据的过程中,浏览器中也不会出现白屏,而是原来的页面状态。

企业通过使用Ajax可以增强网站的功能,改善用户体验。用户可以通过滚动屏幕浏览大量的信息,可以更方便地将物品拖入在线购物车或者在线配置产品,而这些都无须刷新页面。事实上,相当多的企业都在考虑使用Ajax技术来改善用户的体验。

3. AJAX对Web开发模式的冲击

基于Model2的MVC开发模式中,存在一种假设----Web应用的运行逻辑是由一系列的页面切换构成的,这里的每一个页面一般来讲都不是特别复杂,往往有着非常特定的功能和目的。同时页面对于浏览器而言又是不可分割的最小单元,要更新页面中的数据必须对页面进行整体刷新。

利用AJAX的通信机制结合一套好的UI组件,我们完全可以把上面所有的这些操作都合并到一个界面当中。如果产品信息并不复杂,我们可以使用一个可编辑的Grid组件,让用户直接在Grid中进行产品信息的维护。如果产品信息比较复杂,我们可以在界面上再放置一个产品信息的维护表单,用户可以直接在Grid中选择要编辑的产品。所有这些编辑操作的结果都会暂时的缓存在客户端,直到用户完成了上面的各个步骤再一次性的利用AJAX技术提交到后台。这样,在整个操作过程当中用户始终不需要离开这个界面。

由上面的分析可见,AJAX一出场便推翻了Model2的基本假设,用户操作已不再是由一系列页面的更替和刷新构成的了。因此表现层开发技术的升级必然将导致对于MVC设计模式的重新思考和定位。

在传统Web应用中,有着大量的页面流,我们需要一种有效的机制对它进行管理。同时由于表现层的功能相对非常薄弱,控制器往往还要承担起为表现层准备数据的工作。这些在控制器中准备好的数据一般都是利用上下文(如Request的Attributes)以推的方式交给表现层,即推模式(Push Mode)。这种推模式在页面总是以整体刷新的方式获得更新的开发方式中并不会出现什么问题,看起来一切都可以良好的运转。可是当AJAX出现之后,这种运转机制就出现了问题。因为AJAX强调的是减少页面的整体刷新,代之以局部数据刷新。当一个局部数据刷新的请求从客户端被发起时,表现层必须有能力主动的获得所需要的数据。这种操作类似于客户端通过表现层从后端的数据模型中的拉取数据,即拉模式(Pull Mode)。这一功能需求又与传统的Model2思路产生了抵触。回顾上面的分析,我们已经在传统的Model2和AJAX之间找到了两个冲突点:1、对页面流的基本假设不同2、推模式和拉模式的矛盾

4、重构MVC开发框架

Model2和AJAX之间存在着不和谐,这是一个不争的事实。但并不是说我们就必须因此而全盘否定掉传统的MVC架构模式。事实上,企业在过渡到AJAX的过程当中,目前MVC开发框架中的主体仍可以保留下来,只是我们需要对其中的局部进行一些调整。我们将这个过程称之为对MVC开发框架的重构。在这个重构过程当中,首当其冲面临调整的就是控制层,我们需要重新为控制层找到一个定位。如果说在传统的Web应用开发模式中控制层的作用是解耦数据模型和页面的话,那么在新的表现层技术引入之后,控制层的作用就应该是解耦数据模型和表现层的数据接口。如此一来Server端的表现层逻辑就全面接管了与Client端的通信,对于Client端来讲控制层被隐藏到了表现层的后面,只负责表现层与数据模型之间的对接。相应的,原先MVC架构与Client端形成的三角关系也就演变成了垂直分布的三键模式。如图4所示:

我们可以把Server端中MVC的各个组成部分看作是一个封闭的子系统。这个子系统的功能就是从数据库中提取数据经过一系列处理之后交给Client端,同时对Client端提交的数据进行一些列处理之后再保存进数据库。同样如果我们把Clien端中MVC的各个组成部分也看作是一个封闭的子系统,它所完成的工作事实上跟Server端的子系统非常相似,只不过这个子系统的两个交互对象分别是用户和Server端。按照这种思路,最终形成的Web开发模式将是一种迭代式的MVC架构。这种迭代的开发方式对现有MVC的影响稍小,但能够起到的改善交互性的作用。

5、应用效果

利用重构的迭代式的MVC模式,在采用AJAX技术的同时,也保留了传统的MVC模式,带给客户新体验的时候,也保持了程序结构的层次性和藕合性。该模式已经在'网上购物平台'项目中得到应用。

6、总结和展望

传统Web应用主要由3层组成,而增加Ajax技术的Web应用将在传统的Web应用上额外增加一个Ajax引擎,能将控制器的部分功能转移到客户端页面。Ajax技术既是对传统Web技术的革命,也是对传统Web技术的一种改良和发展。Ajax对传统的MVC模式提出挑战,利用重构的迭代MVC模式,可以在不抛弃传统的MVC模式的情况下,有效提高web应用的开发效率和用户的体验效果。

参考文献

[1].http://www.jdon.com/jivejdon/thread/31553.html

[2].吴鹏, 尹思良, 张学杰:一种基于AJAX的JSF应用改进[J]云南大学学报2007, 29 (S2) :244~248

[3].游丽贞, 郭宇春:Ajax引擎的原理和应用[J]微计算机信息.2006.2-205:27-32

[4].刘高原刘觉夫张国平:结合Ajax和JSF技术开发Web应用[J]微计算机技术2007年第23卷第12-3期

MVC模式下程序设计 篇8

MVC是Model View Controller的缩写,Model是指数据模型,或者称为业务应用逻辑,View是指用户视图界面,Controller则是控制器,用来提供应用的处理过程控制。使用MVC的目的是将数据模型和用户界面的实现程序代码分离,这样就可以使同一个程序表现为不同的形式。控制器的目的则是操控数据模型和用户界面使两者同步,一旦数据模型改变,用户视图界面也同步更新。

模型-视图-控制器(MVC)是Xerox PARC在八十年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已被广泛使用。最近几年被推荐为Sun公司J2EE平台的设计模式,并且受到越来越多的开发者的欢迎。

2 MVC的工作原理

2.1 关于Model View Controller工作原理

用户请求的事件提交给给控制器(Controller),从而改变数据模型或用户界面,或者两者都改变。控制器对数据模型的数据进行改变,对应的用户界面就会发生改变,依次类推,控制器改变了用户界面,控制器会从数据模型中获取数据来刷新自己。通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现,如图1所示。

根据Smalltalk语言关于MVC程序设计的思想,每个模块的作用如下。

数据模型(Model)的作用:

封装应用程序的状态和实现应用程序的功能(逻辑、算法)

响应状态查询

通知视图改变

用户界面(View)的作用:

解释模型并发送模型更新请求

截获用户的输入,发送给控制器

允许控制器选择视图

控制器(Controller)的作用:

定义应用程序的行为

将用户的动作映射成模型的更新

选择响应的视图

2.2 MVC的优势和不足

对于早期的Web应用程序,大都使用过程化语言创建,它们将对数据操作的代码和像HTML这样的用户界面代码混在一起,这使得程序的逻辑比较混乱,而且容易出错。MVC模式从根本上强制性的将它们分开,优势是很明显的:

第一,最大化的重用代码。也就是说,对于不同的方式来访问应用程序,可以使用同一个数据模型,即多个视图能共享一个模型,对于不同的用户界面需求,使用同一模型都能处理它们。其原因就在于MVC模式已经将数据和业务规则分开,所以允许最大化的重用代码。

第二,程序设计更加灵活。因为数据模型是用户代码产生的,并且与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。如果想把进迁移或者改变数据源,只需改变数据模型,而程序其它部分不用调整。由于运用MVC的应用程序的三个部分是相互独立,改变其中一个不会影响其它两个,所以依据这种设计思想能构造良好的松偶合的构件。

MVC模式存在的不足:

第一,MVC模式将一个应用程序分成了三个部分,在设计时各部分之间关系比较复杂,而且同一个工程将包含比以前更多的文件。MVC模式没有明确的定义,所以完全理解MVC模式并不是很容易。

第二,系统调试难度加大。由于模型和视图要严格的分离,这样给调试应用程序带来了一定的困难,每个构件在使用之前都需要经过独立的测试。

综合MVC模式的优点和不足,MVC模式早期并不适合小型甚至中等规模的应用程序,这样会带来额外的工作量,增加应用的复杂性,但现在由于开发工具软件的功能补充,此问题不再存在。对于开发有大量用户界面,并且逻辑复杂的大型应用程序,最初使用MVC模式框架时,会花费一定的工作量,但从长远的角度来看,后期会提高软件开发的效率。

3 Grails环境下应用实例

Grails是一个遵循MVC设计模式的开发框架。它分别用Domain Class、View、Controller对应于MVC的模型、视图和控制器。可以简单的把一个Domain Class理解为数据库中的数据表,Grails在底层通过Hibernate(Grails自带的数据库驱动)将Domain Class和数据库的表进行映射,用户界面(View)在Grails中指的是GSP页面,它用于显示用户界面。GSP与JSP类似,既可以编写静态网页的元素,也可以嵌入Groovy代码实现动态内容。控制器(Controller)在Grails中充当着重要的角色:它可以响应用户的请求,可以接收用户提交的表单,还可以访问模型的数据,并传递给用户界面。

下面通过在Grails环境下的开发一个小的系统来说明MVC模式的高效和强大,首先配置环境变量。

3.1 Grails环境配置

第一,配置JAVA环境变量;

首先,下载JDK压缩包,解压后到本地指定文件夹内,例如本文例子中使用jdk1.6.0,解压到以下目录:D:Java Sessionjdk1.6.0,其次,设置环境变量(过程略)。

第二,配置Grails环境变量;

Grails配置与Java配置方法相同,先解压Grails压缩包,然后新建变量Grails_Home,编辑系统环境变量Path,插入新建的变量“%Grails_Home%bin”,即可。

第三,启动测试。

启动命令提示符状态,输入命令java-version,看到版本信息(当前使用的版本是1.6.0_12),证明java系统配置成功,同样输入命令Grails-version,如果看到版本信息则证明Grails配置成功。

3.2 MVC在Grails框架中的体现

使用命令grails create app Project1在当前文件夹下创建一个工程文件Project1,此工程名为Project1,则会自动生成如下系统文件结构,对于系统文件夹说明如下:

grails-app

Conf:存放配置信息,包含数据源、应用程序启动时自动执行的类

controllers:存放控制器(“MVC”的“C”)

domain:存放域类(“MVC”的“M“)

i18n:存放国际化资源文件

services:存放service类

taglib:存放标签库类

views:存放视图模版(“MVC”的V,每个控制器对应一个文件夹并存放在Views中,每个文件夹中可能会有多个页面)

layouts:存放布局模板

lib:存放其它Jar包(如JDBC驱动等)

test:存放测试代码

target:存放编译生成的目标文件

src:存放Java或Groovy源程序

web-app

css:存放CSS样式表

images:存放图片文件

js:存放Java Script文件

WEB-INF:存放部署相关的文件

对于上述目录结构,它约定了不同层次代码存放的位置以及项目的组织方式,这既提供了“约定优于配置”的最佳实践,又节省了开发人员配置项目的精力。

3.3 一个说明问题的案例

对于上面建立的工程,创建M(model),V(view),C(controller)。

添加Domain Class

首先创建model,在grails中就是创建Domain Class,为刚创建好的项目添加一些功能。,Domain Class实质上是数据库表映射的实体类。通过控制台,进入项目的根文件夹(注意:本文出现一切的控制台输入,除create-app外,都需要在项目文件夹中执行),输入grails create-domain-class User,新创建的Domain类出现在了grails-app/domain文件夹中,同时Grails还创建了相应的Test类。用记事本打开grailsappdomain文件夹中的User.groovy,加入如下内容:

创建Controller

接下来为Domain Class Team类创建Controller,在控制台输入grails create-controller User,Grails会在grailsapp/controllers中创建一个名为User Controller的类。编辑User Controller.groovy文件。加入如下代码:

这一行代码,它使User表有了相应的增、删、查、改功能的页面。

创建View

最后生成视图界面,在控制台输入grails generate-Views User,Grails会在grails-app/views中创建User的所有浏览、删除、编辑、列表的视图,使用传统方法需要大量工作的事情,在这里可以快速的实现。在控制台中输入grails run-app,运行此工程文件以查看效果,在此界面可以对记录进行增加,浏览,编辑操作,如图2所示。

4 总结

对于使用传统编程习惯的人,MVC可能稍微显得有点繁琐,但无论从编程的效率还是程序的执行效率来说,MVC都是不可替代的,基于JAVA的平台,也使MVC框架有了更强的生命力。

摘要:本文通过对MVC模式下的程序设计概念和原理的介绍,接合Grails框架模式下的程序设计案例,对MVC模式进行分析,指出其程序设计的优点和不足,帮助设计者更好的掌握此开发模式。

关键词:MVC,Grails

参考文献

[1]宋友,梁士兴,黄璐等.Grails技术精解与Web开发实践[M].北京:清华大学出版社,2009.9

MVC模式 篇9

1 MVC模式

精典的MVC模式分为三个部分[1]:

模型(Model)封装了数据结构与业务逻辑,集中体现了应用程序的状态。也负责与数据库的交互,承担维护应用程序数据的责任。通常是Java Bean或EJB等适合这个角色。

视图(View)显示界面元素,与用户交互,是模型的外在表现。通常是JSP等动态页面。

控制器(Control)对用户的请求进行响应并分派到不同的业务逻辑进行处理。将模型和视图联系在一起。通常用Servlet来实现。

MVC模式体系结构如图1所示[2]。

2 常见MVC模式的Model设计

2.1 基于Java Bean的Model[3]

模型部分用Java Bean来实现是非常普遍的。Java Bean为可重用的、自主的软件构件。业务逻辑封装于Java Bean中,包括对后台数据库的访问与操作。这种方案的Web应用系统体系结构如图2所示。

这种方案中由Java Bean直接操作后台数据库,优点是应用开发简单,结构清晰,易于测试、实现、部署。但它的许多缺点是不可忽视的,主要有如下几个方面:

1)由Java Bean直接访问后台数据库,存在的问题有:开发和维护SQL非常的困难且耗费时间;用SQL会使移植性变的很差,如果一个程序和多个数据库有关系,那么你就要写多个版本的SQL语句;直接写JDBC代码会非常耗时,而且容易出错。你必须写很多的样板代码去获得连接,创建和初始化适当的声明,还要用精确的声明去清理连接。而且你还要写代码去将JAVA对象映射到SQL声明。

2)使用Java Bean最大的缺点是不便于处理并发问题、安全问题、缓存管理等。它不能享受J2EE服务器提供的安全、事务管理、实例池、数据库连接池等诸多服务。比如安全问题就要由开发人员自己编写复杂的代码来实现。

2.2 基于EJB的Model[4]

Enterprise Java Bean(EJB)是一种服务器端组件体系结构[6],它简化了用Java开发企业级的分布式组件应用程序的过程。通过E-JB,能开发可扩展的、健壮的和安全的应用程序,而不用自己去写复杂的分布式基础框架。EJB可以享受EJB服务器提供的各种服务,如低层的服务、实例钝化、实例池、数据库连接池、预缓存实例等。

EJB2.0定义了3种不同的企业级Bean:会话Bean、实体Bean、消息驱动Bean。实体Bean利用J2EE持久层框架可以将对象域映射到数据库中。它提供了创建,查找,删除对象的API函数。基于EJB的Model使用实体Bean来封装业务逻辑及操作数据库,如图3所示。

本方案Java Bean的目的是为了尽量使表示层与业务层分离更彻底。看起来是完美的,但实际应用中缺点也很明显。

1)表示层通过Java Bean访问实体Bean过程中,如果一个客户端需要多个业务对象的信息时,则将需要多个远程方法调用,并且这些调用都是细粒度的。如果一个EJB客户端需要调用三个业务对象的方法,则将需要三个远程方法调用。当存在着大量的EJB客户端,而每个客户端又需要调用多个业务对象时,这种细粒度的网络调用就会成倍的增加,系统性能就会因为网络负载而降低。

2)表示层通过Java Bean直接调用实体bean的方法时,每个方法调用都是独立的工作单元和独立的事务。当一个业务处理过程要调用多个方法时,一旦其中一个方法调用出现故障,不会回滚其它的方法调用,因各方法调用在不同的事务中。这就可能造成数据的不一致性及破坏数据的完整性。

3)如果允许EJB客户端直接访问业务对象,那么就要求客户端了解业务对象的内部方法,这样就把业务模型的细节不适当地暴露给了客户端,从而增加了客户端与业务对象之间的耦合度。当业务对象的方法做了改动时,调用它的客户端的程序也要进行相应的修改。这样做就违背了EJB的设计中要求具有良好的可移植性的原则。

3 基于Session Facade模式的MVC模型方案

3.1 Session Facade模式

Session Facade是以Facade模式为基础的一种EJB设计模式。它应用会话Bean来实现Facade的思想,把实体bean“包装”在会话Bean中,只提供给客户端一个单一的可访问点——会话bean层。Session Facade作为客户端访问业务对象的拦截器,屏蔽了业务对象。EJB客户端访问会话Bean来代替访问业务对象,当一个EJB客户端需要调用多个业务对象的方法时,它只需要进行一次粗粒度的远程方法调用,将请求送给Session Facade,再由Session Facade通过本地方法调用,调用相应的业务对象,执行其方法。这样就减轻了网络负载,提高了系统性能。并且当业务对象的方法改动时,只需要修改会话Bean,而客户端可以保持不变。这就减少了客户端和业务对象之间的耦合度,同时客户端也不必管理事务的细节。采用这种方式后对体系结构的改进如图4所示。

3.2 基于Session Facade模式的MVC模型设计

基于Session Facade模式的MVC模型结构如图5所示。

以在线银行转帐业务为案例[5],说明基于Session Facade方案比基于EJB方案更优越。

基于EJB的设计方案来实现时情况为:一个servlet接收代表Web客户的把奖金从一个账户转移到另一个账户的请求,servlet必须检查用户身份以确保他是被授权的用户,然后从一个银行账户的实体bean中提取资金,并且把它们存入另一个账户的实体bean中去。如图6所示。

整个过程至少要六个网络调用:三个用来查找恰当的实体bean,另外三个用来实际转移资金。而且,因为实体bean本质上是具有事务性的,所以每一个对实体上的方法的调用都会请求一个在服务器的独立事务,用来处理远程实体与它底层的数据存储之间的同步。

基于Session Facade的设计方案:关于奖金转帐业务逻辑用例被置于名为Bank Teller的会话Bean中,它有一个方法为transfer Funds(userpk,account1pk,account2pk,amount),通过这个方法Bank Teller会话Bean就可以对User等实体Bean进行大量的操作,如图7所示。

因为会话Bean和它后面的实体Bean是并置的,所以它可通过实体Bean的home接口与实体Bean进行通信。这样,执行转帐操作所需的网络开销就可减少到只有一个调用(从Java Bean到会话Bean的调用)。

3.3 方案的优点

1)较低的网络开销:只提供给客户端一个单一的可访问点,客户端在一次请求中只需一个网络调用。会话bean与实体bean通过local接口互相通信,不会增加任何网络开销。

2)业务逻辑与表示层逻辑清晰而严格的分离:通过使用会话表面层模式,执行业务逻辑所需的方法完全被包装在会话bean的方法之中,EJB客户端只需要考虑表示层的问题就可以了,它为完成一个工作单元而在一个EJB上所执行的方法永远不会超过一个,这样业务逻辑就被严格地分离开了。

3)事务完整性:会话bean封装在一个事务中,起到了一个把事务都限制在服务器端,事务可以在“会话bean方法”这一级别上被划分边界,也可以通过发布描述符进行配置。

4)较低的耦合性:会话bean缓冲了客户端与实体bean之间的请求。在以后实体bean层需要修改时,可以避免改变客户端,因为客户端是通过会话bean层间接访问实体bean。

5)还有良好的可重用性、良好的可维护性等特性。

4 结束语

MVC模式由于其结构清晰等特性,在当前大型软件开发中应用日渐广泛。其模型部分的设计是关系到一个应用的高效性、可靠性、安全性的重要因素。文中提出使用EJB的Session Fa?ade设计模式来设计MVC的模型部分。很好地解决了其它几种方案中的缺点,并结合某市社保系统企业领导查询系统证明了这一方案的可行性。

摘要:MVC模式是当前开发Web应用较好的一种模式,其模型(Model)部分的设计是至关重要的。比较了几种模型设计方案,提出了基于Session Facade(会话表面层)的模型设计方案,很好地解决了网络开销过大问题,有效地确保了事务完整性、数据安全性。

关键词:MVC,会话表面层,J2EE,EJB,servlet,JSP,javabean

参考文献

[1]赵强,乔新亮.J2EE应用开发(WebLogic+JBuilder)[M].北京:电子工业出版社,2003.

[2]彭小军,刘渊.基于MVC的Enhydra开发技术研究与设计[J].计算机应用研究,2005,22(12):230-231.

[3]陈华泉,张忠能.UML与MVC模式在网站重构项目中的应用[J].计算机应用与软件,2005,22(8):48-49.

[4]Husted T.实战STRUTS[M].黄若波,程峰,程繁科,译.北京:机械工业出版社.2005.

MVC设计模式的分析与应用 篇10

MVC架构是“Model-View-Controller”的缩写, 即“模型-视图-控制器”。MVC程序是由这3个部分组成。MVC架构是一个复杂的架构, 其设计和实现也是相对复杂的。但是, 我们已经设计了功能和安全性很好的设计模式, 并且可以把多种设计模式结合在一起, 使MVC架构的实现转换为相对较为容易的代码实现。

1 MVC设计思想

MVC的思想是把一个应用程序的数据输入、数据处理、结果输出流程按照Model、View、Controller的方式进行有组织的分离, 看似分离却又是统一。这样一个应用程序设计被分成3个部分:模型层、视图层、控制层。

1.1 模型

模型是应用程序的主体部分。模型表示业务数据和业务逻辑, 一个模型能为多个视图提供数据。由于同一个模型可以被多个视图重用, 所以提高了应用的可重用性。

业务模型是MVC最主要的核心。也称企业模型, 它为企业提供一个框架结构, 以确保企业的应用系统与企业经常改进的业务流程紧密匹配。可以说, 也就是说业务建模主要是从业务的角度而非技术角度对企业进行建模。

1.2 视图

视图是用户交互界面, 对于Web应用程序来说, 可以是HTML, JSP等界面。

随着应用程序的复杂度的提高和规模的扩大, 界面的处理也变得非常复杂。应用程序可能有很多不同风格和类型的视图, MVC设计模式对于视图的操作只是数据的采集和处理, 以及用户的请求, 而不能进行业务流程的处理, 也就是带有功能操作的部分交予模型处理。例如一个购物车的视图只接受来自模型的数据并显示给用户, 以及将用户界面的输入数据和请求传递给控制和模型。

1.3 控制

控制器接受用户的输入并调用模型和视图去完成用户的需求。当Web用户单击Web页面中的提交按钮来发送HTML表单时, 控制器接收请求并调用相应的模型组件去处理请求, 然后调用相应的视图来显示模型返回的数据。

控制 (Controller) 可以理解为从用户接收请求, 将模型与视图匹配在一起, 共同完成用户的请求。或者简单的理解, 就是程序的处理流程由它来控制。

模型、视图与控制器的分离, 使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据, 所有其它依赖于这些数据的视图都应反映到这些变化。因此, 无论何时发生了何种数据变化, 控制器都会将变化通知所有的视图, 导致显示的更新。这实际上是一种模型的变化-传播机制。模型、视图、控制器三者之间的关系和各自的主要功能。

2 MVC设计模式的实现

Java平台企业版和其他的各种框架不一样, J2EE为模型对象定义了一个规范。

在J2EE应用程序中, 视图可能由Java Server Page承担。生成视图的代码则可能是一个servlet的一部分, 特别是在客户端服务端交互的时候。J2EE应用中, 控制器可能是一个servlet, 现在一般用Struts实现。模型则是由一个实体Bean来实现。

3 MVC结构

3.1 视图

视图是模型的展现, 它提供用户数据的交互。

在J2EE下, 视图的实现很简单。可以像开发HTML界面一样直接在集成开发环境下通过编写JSP页面来完成页面开发本。一个页面由多个子视图组成;子视图可以是最简单JSP页面。

视图部分大致处理流程如下:首先, 定义了页面的布局;页面配置文件定义视图标签的具体内容;然后, 由编写代码.这一部分主要定义了WEB页面基类Page Base;页面布局策略类Page Layout, 完成页面布局, 用于加载用户部件到页面;用户部件基类User Control Base即用户部件框架, 用于动态加载检验部件, 以及实现用户部件的个性化。为了实现WEB应用的灵活性, 视图部分也用到了许多配置文件例如:置文件有模板配置、页面配置、路径配置、验证配置等。

3.2 控制器

控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时, 控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求, 然后用确定用哪个视图来显示模型处理返回的数据。

在struts中, 基本的控制器组件是Action Servlet类中的实例servelt, 实际使用的servlet在配置文件中由一组映射 (由Action Mapping类进行描述) 进行定义。对于业务逻辑的操作则主要由Action、Action Mapping、Action Forward这几个组件协调完成的, 其中Action扮演了真正的业务逻辑的实现者, Action Mapping与Action Forward则指定了不同业务逻辑或流程的运行方向。strutsconfig.xml文件配置控制器。现在我们总结M VC的处理过程, 首先控制器接收用户的请求, 并决定应该调用哪个模型来进行处理, 然后模型用业务逻辑来处理用户的请求并返回数据, 最后控制器用相应的视图格式化模型返回的数据, 并通过表示层呈现给用户。

现在我们总结MVC的处理过程, 首先控制器接收用户的请求, 并决定应该调用哪个模型来进行处理, 然后模型用业务逻辑来处理用户的请求并返回数据, 最后控制器用相应的视图格式化模型返回的数据, 并通过表示层呈现给用户。

3.3 模型

模型表示企业数据和业务规则。在MVC的3个部件中, 模型拥有最多的处理任务。例如:它可能用象EJBs和Cold Fusion Components这样的构件对象来处理数据库。被模型返回的数据是中立的, 就是说模型与数据格式无关, 这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用, 所以减少了代码的重复性。

业务逻辑层在体系架构中的位置很关键, 它处于数据访问层与表示层中间, 起到了数据交换中承上启下的作用。由于层是一种弱耦合结构, 层与层之间的依赖是向下的, 底层对于上层而言是“无知”的, 改变上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时, 遵循了面向接口设计的思想, 那么这种向下的依赖也应该是一种弱依赖关系。因而在不改变接口定义的前提下, 理想的分层式架构, 应该是一个支持可抽取、可替换的“抽屉”式架构。正因为如此, 业务逻辑层的设计对于一个支持可扩展的架构尤为关键, 因为它扮演了两个不同的角色。对于数据访问层而言, 它是调用者;对于表示层而言, 它却是被调用者。依赖与被依赖的关系都纠结在业务逻辑层上, 如何实现依赖关系的解耦, 则是除了实现业务逻辑之外留给设计师的任务。

参考文献

[1]孙卫琴.精通STRUTS基于MVC的JavaWeb设计与开发[M].电子工业出版社, 2007, 3.

[2]占东明.基于J2EE的MVC设计模式的分析与思考[J].科技广场, 2008, 3.

MVC模式 篇11

[关键词]MVC JSP 网站

Internet的发展,为改变传统的商业运作模式提供了一种技术上的可行性的方案,而IT技术的发展迅速,使企业很难跟上其步伐,不能专注于自身业务的管理建设。目前急需采用一种框架式设计方案,以使企业商务网站平台建设大大简化,而基于MVC模型的商务网站平台建设满足了这种需求。

一、 传统的商务平台解决方案

传统的电子商务网站平台建设主要是基于ASP或JSP动态技术。ASP技术由于只能在微软的操作系统平台下建立,以及安全问题等限制了它的广泛应用,而JSP的动态网页技术一度成为主流,但是早期的网站绝大多数采用JSP+JavaBean开发技术。

1.ASP技术

ASP技术由于Windows系统固有的问题都会一成不变地累加到它的身上。尽管目前推出了COM组件技术使其功能变得强大,但是这种强大由于其自身设计漏洞问题暴露出很大的安全隐患。

2.JSP技术

JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后生成HTML页面返回给客户端浏览器。JSP具备了Java技术的简单易用、完全面向对象、具有平台无关性且安全可靠、主要面向Internet网站的所有特点。

基于JSP技术的网站开发主要两种开发模式,成为模式一和模式二,而模式二开发技术就是基于MVC模型的技术。

二、 模式简介

1.模式一

模式一就是指JSP+JavaBean技术。在模式一中,JSP页面独自响应请求并处理结果返回客户端。所有的数据通过Bean来处理,可以实现页面的表现与页面的内容(逻辑)相分离。但是大量使用模式一可能带来一个副作用,就是会导致在页面里面嵌入了大量的Java控制代码,当要处理业务逻辑时非常复杂,尤其在大型网站建设中这种模式会导致页面维护困难。

2.模式二

模式二就是指JSP+Servlet+JavaBean技术。在模式二中,结合了JSP和Servlet技术,模型二充分利用了JSP和Servlet两种技术的原有特点。此模式技术主要基于MVC模型(Model-View-Control),它的主要思想是使用一个或者多个Servlet作为控制器。请求由前沿的Servlet(可能是多个Servlet构成的处理链)接收并处理后,会重新定向到JSP。在此模式里,JavaBean作为模型的角色,它充当JSP和Servlet通信的中间工具,Servlet处理完成后设置Bean的属性,JSP读取此Bean的属性,然后进行显示。

3.两种模式的比较

从设计角度,模式二具有更清晰的页面表现、清楚的开发者角色划分,可以充分地利用开发小组中的界面设计人员。这些优势在大型项目开发中表现得尤为突出,而使用模式一可以发挥每个开发人员特长,界面设计开发人员可以发挥界面显示效果的设计能力。在目前大型项目开发中,模式二更多的被采用。

三、 基于MVC模型的大型网站平台设计

1.MVC(模型-视图-控制器)模型原理

模型(Model)是网站的核心,用来完成企业主要的业务功能,它接收视图发来的请求,并将处理请求的结果返回给视图,虽然这个请求是由视图发出的,但是这个请求是由控制器来转发的,所以模型所进行的操作相对于视图来说是黑箱操作。这样可以用来封装部分数据,以满足面向对象原则。

视图(View)用来显示模型内容,是显示在用户面前用来与用户进行交互的平台,通常用一些可视化网页编辑软件实现。该部分只用来收集数据和显示模型,以及将用户的请求转发给控制对象,而不应当参与模型中业务流程的处理。同一个业务流程可能由于处理结果的不同而对应不同的视图。

控制器(Controller)对用户的请求做出反应,创建和设置模型,并将模型与视图进行协调,来共同完成用户请求。可以将控制对象理解为一个分发器,它会根据不同用户请求来选择不同模型和视图。并且控制对象同样不能参与业务流程的创建。

2.具体功能模块设计

针对大型商务网站的网页多样性,我们选取具有典型代表的订单处理过程来描述如何基于MVC模型设计。首先在表单中获得订单请求过程时先接受GET请求,执行数据库操作,保存到Request中,并把视图派发到下一个页面。在现实订单的页面中主要包括结果集的处理,假如订单是批量的,则通过迭代来显示所有信息。

3.网站平台设计效果

通过基于MVC模型设计的网站,在Servlet作为控制时,每个Servlet通常只能实现很少一部分功能,多个Servlet就可以结合起来完成复杂的任务,这样的好处是Servlet的重用性好,尽管会导致请求时间加长,但是这可以通过服务器的并行处理解决。

参考文献:

[1]孙卫琴:《精通Struts: 基于MVC的Java Web设计与开发》,2004.8

[2]胡俊彦路鑫鑫:基于MVC设计模式的动态电子政务Web统计模型[J].电脑开发与应用,2004(02)

[3]马溪骏鲁奎:利用JSP实现基于MVC模式的表单提交方法研究[J].计算机应用研究,2004(02)

MVC模式 篇12

1 MVC设计模式

设计模式[1,2]的思想来源于建筑师Christipher Alexander。设计模式为提出的特定设计问题识别和抽象出解决方案,为开发者提供了很好的设计经验,为软件重用提供了一条途径,将程序中的可变部分与不变部分进行分离,减少对象之间的藕合度,而这些正是软件质量的关键因素。

MVC是模型(model)-视图(view)-控制器(controller)的缩写,是二十世纪八十年代为编程语言Smailltalk-80发明的一种软件设计模式[3]。该模式的组成部分为模型、视图、控制器[4],其各自任务及之间的关系结构如图1所示。三部分对应于内部数据、数据表示和输入输出控制部分。

模型,应用程序的核心所在,封装企业数据和业务规则。在一个模型中,代码只需要写一次就可以为多个视图重用,同时提供对模型查询、改变的方法[5]。

视图,是与用户交互的界面,并提供给客户动态的显示,是Model的外在表现形式。对于WEB应用程序而言,视图就是由HT-ML元素等标识语言和Web services组成的界面。

控制器,作为Model和View的联系纽带,接收用户输入的数据并调用View与Model来完成用户需求。根据用户的请求,选择Model完成对对象的更新;然后选择View对象反映Model对象状态的改变。

MVC设计模式在构建Web应用时具有明显的优势,其特点是分布式、扩展性强以及设计明晰。

2 系统分析

系统的分析过程中,我们采用面向对象的分析方法,应用可视化面向对象建模技术UML建立系统模型。

2.1 系统需求获取与分析

需求获取关系到一个软件系统开发的成败。该系统的开发吸取了以往开发忽视需求获取和需求管理的教训,采用对教师、学生和家长的需求调研来确定系统实现功能的范围,有效的避免了需求获取过程中超出系统边界的问题。根据调研情况系统的基本功能需求如下:

1)用户登陆权限控制,实施严格的信息安全机制。用户根据权限的不同将被控制资源使用的范围。

2)资源的浏览、搜索和下载。针对不同的查询方式,提供不同的检索方法;根据权限的不同,控制资源的浏览及下载内容。

3)资源管理和更新。对资源进行添加、删除和修改。

4)资源的分类和栏目的设置。按照资源不同的类别,设置不同的栏目。

5)网络计费管理,根据资源内容、类别和使用的方式收取相应的费用。

2.2 系统建模

标准建模语言UML是一种面向对象的可扩展性的通用图形语言,用于构造各种类型系统的业务模型和软件模型,用可视化和模型化为软件开发的各个阶段提供支持。用例图是UML从用户角度用来描述系统功能并描述外部执行者与系统用例之间关系的一类UML表示图。根据需求调研,经过仔细分析与提炼,该系统用例图如图2所示。

用例描述:

1)管理员作为系统的管理者对整个系统进行管理和维护,可以运用系统的所有功能,包括:注册用户的信息查询、资源管理、栏目管理、用户权限管理等权限。

2)注册用户作为资源的使用者具有对个人信息的查询和更改、资源的浏览、查询和使用等权限。

3)普通用户作为资源的浏览者仅具有对信息的浏览和查询权限,只有成为注册用户才能够使用资源.

3 教育视频点播系统的设计与实现

本系统的MVC模式由JSP+Servlet+Java Bean技术实现。Java Bean是一种软件组件,它基于Java类,用它来完成同数据库的交互任务以及完成计算任务。JSP技术是在传统静态网页中通过插入Java程序段和JSP标记从而与动态生成的HTML相结合的技术。而Servlet这种特殊的Java类、通过采用Java技术来实现CGI功能,通过调用相应Java Bean实现业务逻辑和数据逻辑,实现在JSP页面上显示Java Bean对象中的数据的功能。可以实现对Web系统请求页面的数据域的高效获取。

3.1 系统功能设计

根据教育视频点播系统的服务对象及需求分析,将它分为用户模块和管理模块两大两部分,这两大模块又分别包含4个子模块。系统功能如图3所示。

1)用户模块

登陆模块:面向注册用户和普通用户,负责用户身份验证和注册,以此确定资源使用范围和权限。

信息查询模块:面向注册用户,负责注册用户对个人的信息进行查询、更改以及注销功能。

视频检索模块:面向所有用户,负责网站视频资源的检索、下载,根据用户身份的不同限定资源的使用权限。本搜索采用模糊查询,以视频名称、视频注释等作为关键词,对数据库进行查询,并且可在查询结果中进行二级分类查询。另外,提供对部分教学影片的展示和介绍和在线播放功能

用户帮助模块:面向所有用户,负责对系统资源使用的介绍、用户疑问的解答、注册用户密码找回等功能。

2)管理模块

管理员登陆模块:面向系统管理员,负责管理员身份验证,保证系统和用户信息的安全性。

用户管理模块:面向系统管理员,负责管理用户信息、对用户权限设置。

资源管理模块:面向系统管理员,提供修改删除视频资源的功能,如资源的添加、删除和更新。

栏目管理模块:面向系统管理员,负责对栏目进行管理,如系统栏目的设置、添加、删除和更改。

3.2 数据库设计

动态Web站点的Web页面由数据库存储的信息生成,数据库访问由每次的页面请求引发,这要花费大量的时间和资源。为访问数据库,本系统采用创建一个连接池的方式。为优化数据库连接,在连接池中,采用管理限定数目的数据库连接的方案。同时必须使连接池能被所有的Servlet访问,实现连接池为所有的Servlet所用,必须在所有Servlet装入之前完成连接池的初始化工作。本系统采用的解决方法是:首先,将连接池对象放入一个Servlet中,并将该Servlet存储在Servlet Context对象中,其次,在该web应用程序的web.xml中加入下面的语句:

将该Servlet预装入。这样,就解决了第一次使用连接池时因需进行初始化而造成的连接速度缓慢问题,同时可以使连接池对象为所有Servlet所见。

3.3 系统实现

该系统的数据库管理系统使用Oracle公司的Oracle 10i,Web及应用服务器采用Apache+Tomcat7.0系统,服务器操作系统为Windows XP SP2,开发环境为Eclipse 3.7+Lomboz。

视图部分由JSP网页实现,负责整个视频点播系统与用户交互的工作。控制器部分由Servlet实现,它完成深层次的业务逻辑处理,并将结果返回JSP。模型部分由Java Bean实现,来提供和所需要的业务逻辑。

4 结论

本文并针对目前远程教育中对视频点播系统的实际需求和当前教育视频点播系统的发展状况,在分析MVC设计模式的设计思想的基础上,详细阐述了教育视频点播系统的设计方法,并采用JSP+Servlet+Java Bean技术设计并实现了一个对基于MVC模式的,的教育视频点播系统。经过实践证明,由于采用了MVC设计模式进行开发,使得该系统结构清晰,保证了数据的安全,具有很好运行效果并且提高了系统的响应速度增强了系统的可扩展性和维护性。

参考文献

[1]James Rumbaugh.Object-Oriented Modeling and Design[M].USA:Prentice-Hall Inc,1991.

[2]Robinson P.Object-Oriented Design[M].London:Chapman Ha11,1992.

[3]Erich Garmma,Richard He1m,Ralph Johnson,et al.Design Patterns:Elements of Reusable Object-Orient Software[M].Addison Wes ley,1995.

[4]李赤林,王琳.Model-View-Controller设计模式实例研究[J].计算机与现代化,2003(3).

上一篇:中国企业跨国经营下一篇:高压电容补偿