一种轻量级的多层Web应用架构研究及使用

2020-07-28 00:59张紫桂
陕西科技大学学报 2020年4期
关键词:代码架构逻辑

梁 弼, 张紫桂, 熊 伦

(1.四川文理学院 智能制造学院, 四川 达州 635000; 2.绍兴文理学院 土木工程学院, 浙江 绍兴 312000)

0 引言

目前,分层架构设计思想已在Web应用系统研发中得到了广泛使用,并且J2EE三层Web应用架构是当前主流的多层架构,它把一个完整的Web应用系统划分为三层,从上到下依次为表示层、业务逻辑层及数据访问层,这三层分别承担特定的任务,而且不同层的任务采用不同的技术来实现.其中,表示层的任务由Struts来完成,业务逻辑层的任务由Spring来承担,而数据访问层的任务则通过Hibernate来实现,各层之间相互协作一起完成整个系统的所有功能[1].这种以Struts、Spring和Hibernate为关键技术的三层Web应用架构被称为经典J2EE三层架构,它有利于Web应用系统的分析、设计、实现、部署和维护等,目前已广泛应用于各种Web应用系统,譬如网上购书系统、在线学习平台等[2].

但是,由于经典J2EE三层架构所使用的Struts、Spring和Hibernate三种技术来源于不同公司,其本身是三种不同类型的开源框架,分别用于实现Web应用系统中三层各自所承担的不同任务,当开发人员进行系统整合时往往会出现Jar包、XML配置文件以及代码不兼容等异常情况,从而导致系统难以整合,进而延长系统开发时间,间接增加系统开发成本.此外,交付后的系统还存在可扩展性差、可维护性弱等问题,并且这些问题目前在大规模企业级Web应用系统研发中越发明显.

为了有效解决这些问题,本文有机融合三层架构和MVC模式,提出了一种以Spring框架为基础的轻量级PCBADM架构,并将它应用于红色遗址保护系统等案例,实际使用证明了其正确性、可行性和有效性.

1 基础知识

1.1 三层架构

三层架构是目前使用最为普遍的一种多层架构.其中,表示层为用户可以直接访问和交互的层次,用于显示数据、接收用户输入的数据以及为用户提供一种交互式操作界面.业务逻辑层是系统架构中核心的部分,封装了业务逻辑、领域概念、数据访问逻辑等,主要集中在业务规则的制定、业务流程的实现等.数据访问层主要是负责访问数据,可以访问数据库系统、二进制文件、文本文档以及XML文件等[3].三层中有些层次可以进一步划分,使它变为更多层的架构模型,譬如本文从业务逻辑层分离出控制层和域模型层.并且,各层的任务可以采用不同技术来实现,目前常用的技术是Struts、Spring和Hibernate,即经典J2EE三层架构.

1.2 MVC模式

MVC(Model-View-Controller)是目前流行的一种软件设计模式,已广泛应用于各类应用系统,它由Model、View和Controller三个组件组成[4].其中,Model处理应用程序的数据逻辑,View处理数据显示,Controller处理用户与Web应用系统的数据交互.MVC的目标是有效分离Model和View的实现代码,灵活地让同一个程序可以使用多种表现形式,譬如一批从后台返回的统计数据可以用折线图、饼状图或柱状图等形式来展示它们.Controller的作用是确保Model和View的恰当同步,当Model一改变,View相应地进行同步更新.MVC的核心思想是将应用系统的视图功能、模型功能和控制功能在不同的层上分别实现.因此,本文恰当利用MVC模式的思想和Controller组件的功能来设计PCBADM架构中的控制层.

1.3 Spring框架

Spring框架是轻量级一站式企业应用程序解决方案,它由Spring Core、Spring AOP、Spring ORM、Spring DAO、Spring Web、Spring Context和Spring Web MVC七个模块构成[5].由于不同模块承担不同任务,在具体应用中研发者可以根据需要来选择所需的模块,因此本文所提出的PCBADM架构主要由Spring Core模块、Spring Web MVC模块和Spring DAO模块组合而成.其中,Spring Core是Spring框架最基本、最核心的部分,它提供了依赖注入DI的功能以及对Bean容器的管理功能.Spring DAO实现了对JDBC轻量级封装,用以提供对JDBC操作的支持.Spring Web MVC提供了一个完整的MVC解决方案,通过使用该模块来开发Web应用系统能够很好地与IoC容器相结合.

2 PCBADM架构研究

2.1 PCBADM架构的构建

本文基于经典J2EE三层架构和MVC模式,并以开源的Spring轻量级框架中三个模块(即Spring Core、Spring Web MVC和Spring DAO)为核心,同时有效融合Spring IoC/DI、Spring MVC和Spring JDBC等Spring框架相关技术构建了轻量级的PCBADM架构,即表现层(P:Presentation layer)、控制层(C:Control layer)、业务逻辑层(B:Business layer)、数据访问层(A:Access layer)、数据层(D:Data layer)和域模型层(M:Model layer).其中,Spring Core模块承担业务逻辑层任务,使用Spring IoC/DI等技术来实现[6];Spring Web MVC模块承担控制层任务,采用Spring MVC框架技术来完成[7];Spring DAO模块承担数据访问层任务,使用Spring JDBC技术来实现[8].其具体架构设计如图1所示[9].

图1 PCBADM架构图

由图1可见,该多层架构主要使用Spring框架的相关技术来完成,相对经典J2EE三层架构而言,它所使用的技术更为单一,当后期进行系统整合时不管是代码整合还是XML配置整合都更加容易,并能有效避免不同框架技术整合时Jar包、XML文件等不兼容情况出现.同时,该多层架构是一种弱耦合结构,层与层之间的依赖是向下的,下层对上层来讲是透明的,改变上层的设计对于其调用的下层而言没有任何影响,这不仅有力地提高了各层实现的灵活性,而且恰当地实现了软件设计目标--高内聚低耦合,这有利于Web应用系统后期的扩展和维护.

2.2 PCBADM架构各层功能及技术

表现层(P)是用户接口(即Web界面),用于接收用户输入的数据以及显示后台返回的响应结果,这主要通过Html5或JSP等技术来实现.控制层(C)接收来自于表现层的用户请求,并对请求信息进行转发控制,然后调用业务逻辑层相应的业务Bean完成具体事务,最后再将处理结果返回到表现层,其作用相当于传统的Servlet,因此该任务主要由Spring MVC来完成[10].业务逻辑层(B)处于控制层和数据访问层之间,在数据交换中起着承上启下的作用,它包含具体应用的业务对象、业务规则和业务服务,完成特定的业务逻辑功能,并封装成JavaBean组件交由Spring IoC容器进行管理[11].这样通过使用IoC容器,并利用DI的方式,可以有效实现业务对象之间的解耦和业务Bean之间的交互.

数据访问层(A)是连接数据库的接口,负责从一个或者多个数据库中查询或者更新数据的一组类或组件,用来定义、添加、查找、修改及删除数据,并管理应用服务对数据的请求操作,这由Spring JDBC来承担.数据层(D)是系统状态持续性的实际表现,它为整个Web应用提供数据服务,数据服务一般都涉及大存储量的数据资源,必须借助外部存储工具来实现,本架构通过关系型数据库管理系统(SQL Server)来完成.域模型层(M)是业务领域相关对象的OO表现,担负着各层次及模块间传递数据的职责,它贯穿于Web应用系统的全过程,此架构通过简单的POJO来实现.

由此可见,PCBADM架构将一个完整的Web应用系统恰当地划分为六个层次,而且每一层完成各自特定的任务,其各层主要功能及相应的实现技术可概括如表1所示,并且各层各司其职但又一起协作地实现整个Web应用系统的功能.

表1 PCBADM架构各层的主要功能及技术

3 PCBADM架构的使用

红色遗址是革命先辈留给我们的重要红色资源,应该使用先进的信息技术加以保护,进而提高红色遗址数字化保护水平[12].基于此,本文把所提出的PCBADM架构应用于红色遗址保护系统,以该典型案例来证明其可行性和有效性.根据上图1,首先把该保护系统划分为表现层、控制层、业务逻辑层、数据访问层、数据层和域模型层,然后依据PCBADM架构所需的技术,以MyEclipse 2018为开发平台,Tomcat 8.5为后台服务器,并基于Java语言,使用Spring IoC/DI、Spring MVC、Spring JDBC、JSP以及Html5等技术,按照图1的层次关系依次实现红色遗址保护系统各层功能.

3.1 表现层(P)的实现

该保护系统表现层的展示功能主要通过Html5、JSP等技术来完成,并恰当融合Web3D等技术实现红色遗址360度全景漫游来增强用户体验.本系统主要的表现层页面有index.html、hongYiXiangQing.html、chaKanWeb3DHongYi.html、chaKanWeb3DHongYi_jianmenguanyizhi.html、zhuCe.jsp、dengLu.jsp、yongHu.jsp、guanLiYuan.jsp、 hongSeXinWen.jsp和pingLun.jsp等.

3.2 控制层(C)的实现

该保护系统的控制层负责对用户Http请求的转发控制,主要通过Spring MVC来实现.而且Spring MVC能很好地支持多种表现层技术,能将表现层和控制层进行恰当集成,有效实现两层之间的数据通信.本系统主要的控制文件有HongYiController.java、YongHuController.java、GuanLiYuanController.java、HongSeXinWenController.java、PingLunController.java、TuPianController.java及Web3DHongYiController.java等,其中HongYiController.java的核心伪代码形式如下,其它控制文件形式类同,并完成相应的Spring-servlet.xml配置[13].

……@Controller@RequestMapping("/hongyi")

public class HongYiController {

@RequestMapping("/center") public String center(){return "hongyi";}

@InitBinder public void initBinder(WebDataBinder binder){binder.registerCustomEditor(……);} }……

3.3 业务逻辑层(B)的实现

该保护系统的业务逻辑层实现系统具体的业务功能,主要采用Spring IoC/DI技术来实现,其目标是简化业务Bean的编写和对这些Bean的管理.本系统的业务Bean主要有HongYiService.java、YongHuService.java、GuanLiYuanService.java、HongSeXinWenService.java、PingLunService.java和TuPianService.java等,其中HongYiService.java的主要伪代码如下,其它业务Bean编写类同.

public class HongYiService implements HongYiServiceInterface{……

public void saveHongYi(HongYi hongYi) {

hongYiDAO.savehongYi(hongYi); }

public List getHongYiAll() {return hongYiDAO.getHongYiList() ;}……}

此外,业务逻辑层还一个关键任务是配置ApplicationContext应用上下文——Spring.xml,该配置文件是整个系统的基础,通过它能恰当地将上下各层融合在一起,其配置模板结构如下[14]:

xsi:schemaLocation="http://www.springframework.org/schema/beans……>

-ref="ds" />……

3.4 数据访问层(A)的实现

该保护系统的数据访问层承担对数据库中数据的访问操作,主要使用Spring JDBC来完成.本系统的核心DAO类有HongYiDAO.java、YongHuDAO.java、GuanLiYuanDAO.java、HongSeXinWenDAO.java、PingLunDAO.java、TuPianDAO.java等,其中HongYiDAO.java里获取所有红色遗址信息的关键伪代码格式如下,同样需完成相应的Spring-jdbc.xml配置[15].

public class HongYiDAO implements HongYiDAOInterface{……

public List getHongYiList() {

return (List) jdbcTemplate.query("select * from hongYiTable",new HongYiRowMapper() };……}

3.5 数据层(D)的实现

该保护系统的数据层负责对系统中持久化的数据进行管理,并通过传统的关系数据库SQL Server 2012来实现.根据需求分析,得到本系统的数据库hongYiDB主要包含的数据表有hongYiTable、yongHuTable、guanLiYuanTable、hongSeXinWenTable、pingLunTable和tuPianTable等.其中,yongHuTable的字段为(id,yNumber,yPassword,yPhoto,ySex,yBirth,yAddress,yMail,yStatus,zcTime……),其它表的字段根据需求来类似设计并使用SQL Server 2012来实现.

3.6 域模型层(M)的实现

该保护系统的域模型层使用POJO类来对各层交互的临时数据进行封装和传递,其主要POJO有HongYi.java、YongHu.java、GuanLiYuan.java、HongSeXinWen.java、PingLun.java和TuPian.java等,其中GuanLiYuan.java核心代码格式如下,其它POJO类似.

public class GuanLiYuan {

private Integer id; private String gName; private String gPassword;……

public void setId(Integer id) {this.id = id;}

public Integer getId() {return id;}

其它属性的setter/getter方法……}

4 PCBADM架构使用结果分析

本文使用所提出的PCBADM架构来设计和实现红色遗址保护系统,并与经典J2EE三层架构在相同环境下开发本案例进行对比实验.

4.1 开发环境

硬件环境为Intel Core i5-8300H @ 2.30GHz,8GB RAM,1TB HDD,128GB SSD,100 Mb/s Ethernet等,软件环境为Microsoft Windows 10,SQL Server 2012,JKD 1.8,MyEclipse 2018,Tomcat 8.5,Spring 4.3,Spring MVC 4.3,Spring JDBC 4.3,Struts 2.5,Hibernate 5.2,Dreamweaver CS6等.

4.2 对比标准

开发时间:软件生成周期中开发软件阶段所用的时间.

代码行数:源程序代码行的总数量.

配置文件:一种为计算机程序配置参数和设置初始值的计算机文件.

软件大小:软件在计算机磁盘里面所占有的空间.

整合出错率:软件开发后期各模块整合时出错的几率,出错率=出错值/正确值*100%.

4.3 实验结果

相同的软硬件环境下,使用PCBADM架构和经典J2EE三层架构来开发红色遗址保护系统,在开发时间、代码行数和配置文件等标准所得到的实验数据如表2所示.

表2 两种架构应用比较

由上表2可得,与经典J2EE三层架构相比,使用PCBADM架构来开发红色遗址保护系统所使用的开发周期缩短了约35.4%,整合时的出错率减少了约15.8%.并且,我们将该多层架构应用于其它Web应用系统(如红色文物展示系统、红色景点旅游系统等)也得到类似的结果.

通过在多个Web应用系统上进行实践,结果证明使用PCBADM架构来开发Web应用系统具有如下优点:

(1)设计更加清晰:该多层架构基于目前主流的三层架构和MVC模式来设计,它将一个完整的Web应用系统按其功能合理地划分为六个层次,避免了传统三层架构分层不够明晰的缺陷.

(2)开发时间更短:该多层架构清晰的分层设计使项目分工更为明确,六层中每一层由不同类型的技术人员负责,六个层次所对应的模块可以并行开发,且互不影响,这有效缩短了系统的开发时间.

(3)整合更加容易:由于该多层架构的核心层主要使用Spring相关技术来实现,不论是代码编写还是XML配置所涉及的技术都比较单一,很少出现整合不兼容的情况,这有效降低了系统整合的出错率.

(4)软件体积变得更小:从实际的案例开发可看出,该多层架构提高了代码的复用率,并且通过充分使用Spring的新服务(如Annotation等)以及IoC容器的强大管理功能,可以在很大程度上缩减程序的代码量及配置量,这使得所开发出来的Web应用系统体积变得更小.

(5)更易于扩展和维护:由于各层之间是弱耦合,使得模块与模块之间联系比较弱,当对某一模块做修改时并不会影响到其它模块,这有利于系统后期的扩展和维护,但会导致系统总体性能有所下降.

5 结论

目前,设计合理恰当的多层架构已成为开发Web应用系统中一个重要的过程,架构设计的优劣将直接影响着系统后期的开发与维护.本文不仅提出了一种新的轻量级PCBADM架构,而且将其应用于红色遗址保护系统典型案例中.通过在多个类似案例上进行反复实践,结果都证明该多层架构能有效提高代码复用性和应用系统的可维护性,并能恰当减少数据描述和应用操作之间的耦合度.

而且,基于该多层架构来开发Web应用系统,这在一定程度上是软件开发思想的一个进步,它进一步解决了软件开发中模块间的耦合性、模块整合时的兼容性等问题,为开发配置量少、代码清晰和可扩展性良好的系统提供了基本思想.然而,分层过多在一定程度上会降低系统性能,所以在分层架构设计中应该恰当地把握一个度,这是我们后续需要深入研究的内容.

猜你喜欢
代码架构逻辑
刑事印证证明准确达成的逻辑反思
逻辑
创新的逻辑
功能架构在电子电气架构开发中的应用和实践
基于B/S架构的图书管理系统探究
构建富有活力和效率的社会治理架构
女人买买买的神逻辑
神秘的代码
一周机构净增(减)仓股前20名
一行代码玩完19亿元卫星