APP下载

开源MVC框架的优势与应用

2012-05-27

关键词:表示层开源视图

吴 建

(重庆邮电大学数字图书馆技术部,重庆 400065)

0 引 言

很多大型的J2EE项目都用自己的内部框架来隐藏平台的复杂性,直到最近人们才逐渐发现一些在很多项目中都存在的共有的难题,如系统的可复用性和可维护性等.而且这些难题都可以由一个较为统一的解决方案来解决,有的开源框架正好可以充当这些问题的解决方案.目前,在软件开发过程中有一种很明显的趋势:与从前的内部框架相比,标准的开源框架将成为这些难题的更加“标准化”的解决方案.

近年来J2EE平台的日益成熟也是这些开源框架流行的一个重要原因.系统设计人员与开发人员逐渐认识到系统的很多功能是J2EE的标准API无能为力的,而且从开发者的角度来看,要弥补这个缺陷是一个很大的挑战[1].另外,一部分主流的开源框架开始在不同的研究和应用领域得到了快速发展,这些开源框架为项目开发人员提供了比较稳定的技术支持和系统架构.

从1999年左右开始,许多软件设计和开发人员逐渐对基于JSP的“Model1”模型所具有的缺陷有了较深刻的认识,因为在JSP文件中存在很多数据库操作和逻辑处理的代码.如此一来,在JSP页面中既有Html标签代码,还会有大量的逻辑处理代码.在90年代,软件开发者还没有掌握办法利用比较成熟的J2EE框架和标准来解决这个难题,开发人员智能自己设计和实现系统的前端控制器代码,并将JSP页面中的逻辑处理代码转移到Java类中,从而可以减轻对JSP页面的维护难度[1].

1 MVC设计模式的原理与优势

1.1 MVC模式的基本概念

MVC模式是一种在软件设计中比较流行的设计模式,它是将一个开发应用的业务逻辑处理和分析模块、系统表示层以及控制功能在三个不同的层上进行设计和实现,MVC最大的优势就是提高了系统模块的可重用性,体现了系统的高聚合和低耦合特性,并且具有较高的可读性和可维护性.由于MVC自身的优势,可以在很大程度上提高项目开发的效率.而且,随着基于B/S模式应用系统的广泛应用,针对 Web网络程序快速设计和开发的MVC框架也逐渐成为新的研究热点[1].

MVC(Model-View-Controller)是一种比较优秀的软件开发模式,它将一个系统的结构划分为模型层、视图层和控制层[1],这种模式可以提高系统的开发效率,并保证系统的稳定性,使程序结构更加直观.

视图(View)也称作表示层,它是系统与用户交互的界面,例如Web项目中的HTML界面等.表示层主要的功能是为用户提供交互的接口,它允许用户在界面上进行输入和编辑操作,并将系统产生的处理结果以一定的形式和规则返回给用户,表示层一般并不数据的逻辑处理操作,而且在MVC模式中多个不同的视图可以对应一个模型,这样同一个模型可以被不同的视图重用,在很大程度上提高了代码的可重用性.

模型(Model)是系统的业务逻辑层,在这部分主要包括跟系统的业务逻辑规则处理相关的代码,业务逻辑层主要针对系统的业务应用,根据系统的业务逻辑规则处理表示成传递过来的业务数据,并将系统返回的结果返回给表示层进行显示.在MVC模式的三层中,模型层是最核心的系统部件,具有最重要的数据处理任务.业务逻辑层还负责制定业务数据的逻辑规则,并按照规则执行系统的业务流程.由于一个模型可以为系统的多个视图提供处理后的数据,不需要为每个视图编写应用于模型的代码,因此提高了系统代码的重用性,也提高了系统的开发效率.

业务模型中还存在着一个很重要的概念,就是数据模型.系统的数据模型主要指实体对象的数据存储.例如,将一条用户记录保存到数据库中,或从数据库获取用户信息.

控制器主要是用于处理系统中用户交互的组件,它与模型相互协作,根据业务逻辑选择一个正确的视图返回显示层.在基于MVC模式的应用系统中,显示层仅仅用于显示用户需要的信息;控制器部件用于处理和响应用户在显示层的输入和交互.例如,当控制器处理用户提交的查询字符串值时,会将这些值传递给系统的模型,模型再利用这些参数进行数据库查询操作.

在MVC模式中,业务逻辑和数据访问模块位于Model层,视图层主要负责娴熟数据,控制器用于转发但不涉及业务逻辑处理.系统具体的逻辑事务处理和数据访问都放到模型层中.

MVC设计模式对基于Web应用的软件架构产生很大影响,促进了基于组件的设计思想,产生了许多开发Web层次框架的实现技术.在系统中,如果模型层的数据和业务发生了变动,系统中的控制器都会及时地将数据的变化情况显示视图中.这种映射方式也是一种系统的模式变化-传播机制.在一个系统中,Model和View、Controller之间的相互作用关系如图1所示.

图1 MVC设计模式的结构

1.2 MVC设计模式的优势

MVC设计模式的优势主要体现在以下几个方面:

(1)这种设计模式可以为一个模型创建多个不同的视图.而且,这种模式可以保证系统的稳定性.

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

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

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

(5)将系统开发分成三层,有利于开发人员分工合作,加快开发进度,保证开发质量.

(6)在很大程度上,提高了系统的可复用性和可维护性[3].

2 主流MVC框架介绍

2.1 Struts框架介绍

基于Struts框架体系结构开发的Web应用在响应客户请求时,各个组成部分工作的原理如图2所示.

图2 Struts工作原理

对于基于Struts框架的Web应用,当客户端浏览器发出请求时,请求会被拦截器截获,并调用在 Web应用启动时就加载并初始化控制器Action-Servlet,然后通过 Action-Servlet从struts-config.xml配置文件中读取预先设置的配置文件[4].

系统的控制器可以根据服务器上配置文件中的参数信息,自动调用正确的Action对象并进行某种相应,也可以根据实际情况将处理后的数据返回给用户的浏览器.由于Action对象不具有逻辑处理功能,它只能作为系统的控制器和Model之间的桥梁.

通过上面的分析,可以看出控制器在Struts框架的整个工作过程中起着关键的作用,他是系统执行流程的控制和调度中心,ActionServlet类是Struts中最核心的控制器组件,但是ActionServlet类本身不能处理逻辑数据,也不包含系统的调度和控制参数,而系统所有的流程控制信息需要在服务器上的struts-config.xml文件中进行配置.

2.2 EasyJWeb框架介绍

EasyJWeb[5]是基于java技术,主要应用于 WEB项目的MVC开发框架,EasyJWeb框架的设计思想来源于实际的项目实践,这个框架在设计时在很大程度上借鉴了其他几个主流开源WEB框架的设计思想,将多个优秀开源框架的优势进行了融合.EasyJWeb框架利用Velocity作为系统页面的处理引擎,而且还全面地实现了系统界面和内部逻辑处理的分离.总体来说,EasyJWeb框架在一般的Web项目开发中具有很强的技术优势.

2.3 Spring MVC框架介绍

Spring框架主要是根据《Expert One-on-One J2EE Design and Development》一书中所阐述的设计思想的具体实现.它同样是一个常用的开源框架,由Rod Johnson所设计和开发[6].它是为了解决企业应用开发的复杂性而创建的.Spring框架使用基本的JavaBeans来完成以前只可能由EJB完成的事情.而且,Spring框架不仅能应用于服务器端软件的开发,从系统开发的可重用性、可测试性和架构稳定性等方面来看,任何基于J2EE的应用程序都可以利用Spring框架的技术优势.Spring是一个轻量级的具有控制反转和代码面向切面特点的开发框架,其主要特点如下:

(1)轻量级编程

从大小与开销两方面而言Spring都是轻量的.完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布.并且Spring所需的处理开销也是微不足道的.此外,Spring是非侵入式的.

(2)控制反转

Spring框架主要是利用控制反转[7](IOC)技术实现了设计的松耦合.而且在应用了IOC技术后,系统运行时的对象示例可以以被动的方式传递自己的依赖.

(3)面向切面

Spring框架具有对面向切面编程特点的强大支持,提供另外一种角度来思考程序结构,切面对关注点进行模块化,例如横切多个类型和对象的事务管理.它使得Spring可以不需要EJB就能提供声明式事务管理;或者也可以使用Spring AOP框架的全部功能来实现自定义的切面.

(4)容器

Spring有两个核心接口Bean Factory和Application Context,其中 Application Context是 Bean-Factory的子接口,它们代表了Spring容器,Spring容器是产生Bean的工厂,用于管理容器中的Bean,在spring的J2EE应用中,所有的组件都是Bean.Bean在Spring容器中运行,无须感受Spring容器的存在,同样可以接受spring的信赖注入,包括Bean属性的注入、合作者的注入、信赖关系的注入等.

Spring容器负责创建Bean实例,所以需要知道每个Bean的实现类,JAVA程序的实现面向接口编程,无须关心Bean实例的实现.但Spring容器必须能精确知道每个Bean的实现类,因此Spring配置文件必须精确配置Bean的实现类.

3 开源框架的整合开发

3.1 Struts与Spring、Hibernate的整合

在当前的基于Java的 Web开发中,Spring框架+Struts框架+Hibernate框架是最主流的组合,简称SSH.采用Spring、Struts、Hibernate之后的Web应用可以划分为三个层:表示层、业务层和持久层,各层的主要功能如下.

表示层(View):该层的JSP页面主要负责将用户请求提交给业务层,并展示将业务层执行后提供的数据.

业务层(Service):该层主要负责业务模块的逻辑应用设计,通过接收表示层提交的数据,调用持久层中的DAO类,进行业务处理.

持久层(DAO):该层主要接收业务层的调用,完成持久化工作.

在SSH的具体实现过程中,表示层采用Struts框架,持久层采用Hibernate框架,业务层则采用Spring框架.

3.2 Struts、Spring、Hibernate与Compass的整合

Compass是一流的开放源码JAVA搜索引擎框架,利用Struts、Spring、Hibernate与Compass的整合开发全文检索系统是目前最常用的开发技术.Compass是建立在Lucene搜索引擎的基础之上的,该框架是对Lucene搜索引擎在企业应用(数据库应用)中的增强.

同时Compass实现了快速索引操作和优化,并使搜索引擎具有事务处理能力.

3.3 基于开源框架的校园网搜索引擎实现

本文采用Compass等多个主流的开源框架,实现了校园网范围内的搜索引擎,在该系统的开发过程中充分体现了开源框架的优势.

(1)网页搜索功能

当用户在首页上选择“全部”搜索标签并提交要搜索的关键词后,系统会为用户搜索相关的网页、文档等内容.系统运行效果如图3所示.

当用户点击某一篇文章的标题时,浏览器将会在新的标签内打开该网页.如果搜索结果是一个文档时,在用户点击标题时系统将会提示用户是否下载该文档.而且,系统还实现了文章摘要生成、网页快照、相关搜索、中文分词、结果分页等功能.

(3)资讯搜索功能

当用户在首页上选择“资讯”搜索标签并提交要搜索的关键词后,系统会为用户搜索相关的新闻网页.例如,当用户搜索与“新闻”相关的内容时,系统运行效果如图4所示.

4 结 论

本文主要讨论了目前开发人员常用的开源框架技术,在软件的开发过程中采用开源框架能提高软件的可复用性和可维护性,而且有利于团队的开发合作,既可以加快开发进度,又可以保证软件的质量.同时,本文还详细介绍了多种框架整合技术,并利用Compass等开源框架开发了一个基于校园网的搜索引擎.现在,软件工程领域中新技术和新方法层出不穷,只有将新出现的技术应用到自己开发的项目中,才能真正达到学以致用的目的.

[1]Rod Johnson.J2EE设计开发编程指南[M].北京:电子工业出版,2003.

[2]李 容.基于 MVC模式的WEB应用研究[J].软件导刊,2010,9(1):19-21..

[3]任中方,张 华,闫明松,等.MVC模式研究的综述[J].计算机应用研究,2004,10(1):1-4.

[4]冯相忠.基于MVC设计模式的Struts框架及其应用的研究[J].计算机技术与发展,2006,16(8):131-134.

[5]苑宝林,李志蜀.基于EasyJWeb框架和MVC模式的Web应用[J].计算机应用,2008,28(z2).

[6]刘 丹.基于Struts,Spring,Ibatis框架的商品进销存管理系统研究[J].软件导刊,2011,10(6):94-96.

[7]RobHarrop,Jan Machacek.Spring专业开发指南[M].北京:电子工业出版社,2006:49-182.

猜你喜欢

表示层开源视图
基于Spring的企业级Web项目架构设计研究
五毛钱能买多少头牛
5.3 视图与投影
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0
ASP.NET三层构架解析
基于SSH框架科研管理系统的设计