APP下载

基于Spring的企业级Web项目架构设计研究

2019-10-08王悦张雷

软件 2019年6期
关键词:表示层

王悦 张雷

摘  要: 阐述了企业级web项目开发的需求特点,架构设计的基本原则和思路,提出了使用多层结构的Web项目架构思想,分析了不同层次的业务范围和功能特点,研究了表示层、控制器层、业务逻辑层、数据持久化层的主要功能及面相接口编程的实现方案。

关键词: Spring;表示层;控制器层;业务逻辑层;数据持久化层

中图分类号: TP311. 11    文献标识码: A    DOI:10.3969/j.issn.1003-6970.2019.06.012

本文著录格式:王悦,张雷. 基于Spring的企业级Web项目架构设计研究[J]. 软件,2019,40(6):5356

【Abstract】: This paper expounds the requirements and characteristics of enterprise-level web project development, the basic principles and ideas of architecture design, and puts forward the idea of multi-tier web project architecture. It also analyses the business scope and functional characteristics of different levels, and studies the main functions of presentation layer, controller layer, business logic layer and data persistence layer, as well as the implementation scheme of face-to-face interface programming.

【Key words】: Spring; Presentation layer; Controller layer; Business logic layer; Data persistence layer

0  引言

伴随着信息社会的到来,各类型的应用系统不断涌现,在Web领域的应用系统开发中,占据主导地位的JAVA技术往往采用Spring框架作为Web项目开发的主体技术。Spring框架从诞生到如今已经经历了多个版本,精简了大量配置操作,减少了J2EE的使用难度,是业界较为推崇的主流开源框架。

在企业级项目开发中,对于项目开发的可管理性、科学性、项目化等方面提出了更高的要求,由于企业级项目开发具有开发人员多、项目复杂度高等特点,为实现高内聚、低耦合的原则,必须在团队化项目开发中有一整套完整的、可分解的、易于

对接的架构设计模型作为开发的基础,对架构进行科学、合理的分层设计,达到原子化的架构模型设计。

1  基于Spring的企业级项目架构

一般来说,基于Spring的企业级架构分为六个层次,分别是表示层、控制器层、业务逻辑层、数据持久化层、数据存储层和操作系统层。

由图1可知,表示层是用户与系统交流的接口层,是用户直接与系统进行信息交互的重要一层,该层又可以叫做用户接口层,简称UI(user interface);表示层的下面是控制器层,该层负责将表示层提交的信息处理后给到下一层业务逻辑层,同时也将业务逻辑层的结果返回给表示层,负责相关页面的跳转等操作;业务逻辑层是整个系统的核心,该层定义了系统的主要业务需求的实现与管理[1];数据持久化层是负责将系统信息在系统与数据存储层之间的操作管理;数据存储层一般是脱离于Web项目的独立子系统,常用的如MySql数据管理系统、Oracle数据管理系统等,用于对数据的存取进行管理;操作系统层是项目运行的环境,负责与网络、硬件之间进行对接,是独立于Web项目的系统。

2  Spring的表示层

Spring框架的表示层(Presentation layer)设计往往采用较为传统的Html+Css+JavaScript组合或者Html+Thymeleaf组合,Html是页面编程语言,一种标准的标签语言,在大多数的项目开发中,其都是一种前端开发标准;Css是页面美化的主要工具,近些年来,随着移动设备的兴起对于多设备兼容等问题的出现,Css也推出了Css3这个版本,可以有效的解决多设备自适应问题;JavaScript动态前端编程语言,可以实现实时的前后端信息交互,是目前较为流行的动态前端的主要技术[2]。

Thymeleaf是一个前后端兼顾的框架,可以将后台代码直接在前端页面中调用,同时可以将前端信息直接带入后端,结合Spring框架可以做到很好的前后端互动。其在前端的调用中一般需要在文件中添加th:标签,在后面加入相应的代码可以实现前后代码的互动。在Spring项目开发中Thymeleaf是一个很好的前后端兼容框架,常常被各大项目所采用[3]。

3  Spring的控制器层

控制器层(Controller Layer)是MVC设计模型中的一个重要环节,模型(model)、视图(View)、控制器(Controller)是一种经典的设计模型,其将项目开发分为了三个层次,也就是视图、控制器、模型,在Spring框架的企业级开发中,在MVC的基础上更加细致的划分了开发层次,但是控制器层仍然采用MVC中的Controller。

Spring MVC框架是Spring技术体系满足Web项目开发中采用MVC架构时所设计的一个专用框架,在该框架下,开发人员可以使用丰富的库资源实现表示层与控制器层之间的交互,满足前后端信息的传递与处理[4]。在Spring MVC框架中常常使用Annotation的方式聲明控制器类,该种情况下的控制器工作流程是,用户通过表示层传递过来的请求信息将被DispatcherServlet控制器拦截,HandlerMapping处理映射关系,找到对应的处理器,生产处理器对象及处理器拦截器,DispatcherServlet通过返回的信息选择合适的HandlerAdapter(处理适配器),HandlerAdapter调用并执行Handler(这里就是后端控制器,也就是开发人员开发的注解Controller类),Handler按照程序执行处理后,将返回一个ModelAndView对象,该对象包含对应的返回结果前端视图,DispatcherServlet根据该前端视图将结果返回,前端渲染视图展示结果。

DispatcherServlet的配置有两种方式,Xml和Annotation两种,Xml配置较为常用,其在Web.xml文件中添加对应的标签。

……

org.springframework.web.servlet. DispatcherServlet

contextConfigLocation

/WEB-INF/myspring/ dispatcherConfigs.xml

1

1确保Web一旦启动首先运行该Servlet,由此可以使得Dispatcher Servlet第一个被调用,从而拦截所有Web请求;Annotation的方式是通过实现包org.springframework. web中的接口WebApplicationInitializer,并且实现其onStartup()方法,使用XmlWebApplicationContext创建上下文对象context,通过该对象设置配置文件路径,使用ServletRegistration.Dynamic创建dispatcher对象,由该对象设置加载优先级为1,保证当Web启动时首个启动该Servlet,并且由“/”设置拦截所有请求[5]。

public class MyWebA implements WebApplicationInitializer {

@Override

public void onStartup(ServletContext arguments) throws Exception {

XmlWebApplicationContext mycontext = new XmlWebApplicationContext();

mycontext.setConfigLocation("/WEB-INF/myspring/dispatcherConfigs.xml");

ServletRegistration.Dynamic mydispatcher = arguments.addServlet("mydispatcher", new DispatcherServlet (mycontext));

mydispatcher.setLoadOnStartup(1);

mydispatcher.addMapping("/");

}

}

Spring MVC的核心是一个配置文件,该文件被存储在类路径下,该文件负责将DispatcherServlet拦截下来的Web請求加以分类处理,例如:根据扩展名的不同交由不同的后端控制器处理,一般该配置文件由两种配置方案处理,一种是使用该配置文件的Xml配置方式,另一种是由Annotation注解的方式加以处理,但是第二种方案仍然需要Spring MVC配置文件的存在。

<?xml version="1.0" encoding="UTF-8"?>

……

……

上面是一个简单的Spring MVC配置文件,其中的元素表示,当有结尾为firstController的请求时,由cm.springmvc.controller.FirstController该类加以处理,FirstController是控制器类。以上这个是一个有Xml配置的Spring MVC示例,当有多个控制器需要处理时,这种方式就会显得较为臃肿,使用Annotation注解的方式实现控制器的注册是企业级项目开发中常常被采用的一种方案,其实现更为灵活,不会增加整个配置文件的负担,只需要在Spring MVC的配置文件添加,在该包下面由@Controller注解标注的控制器类就会被检索到,当我们需要添加新的控制器时只需在该包下创建新的类即可满足项目需求,从而简化项目开发的管理成本。

4  Spring的业务逻辑层

业务逻辑层(Business Logic Layer)是企业开发的核心层,是考验一个项目是否成功的关键所在,其接受上层控制器层传递的信息、命令,调用相关的算法、下层的数据持久化层完成相关业务的处理,并将结果返回给控制器层,该层是整个Web项目的核心,控制中枢,在很多大的Web项目中该层都是由设计人员首要考虑完成、丰富和实现的内容,由于业务逻辑层由业务而生,不同的业务有不同的需求,所以在Spring框架中并未设置专属的类库加以封装,而是由设计者采用面向接口编程IOP(Interface-oriented programming)的思维模式设计而成,基本思路是,将业务中需要实现的方法统一的由一个Service接口来管理,方法具体实现的内容则由实现该接口的类来实现,接口可以设置某一业务领域的统一方法名,分支领域的业务实现有所不同,可以为每个分支领域设置一个实现类来实现相关方法,从而实现“思想统一,但具体事情具体分析”的特性。

从目录结构来讲,业务逻辑会有一个统一的包,往往采用services结尾,例如:com.gdkm.services,其中com是公司的简称,gdkm是项目的简称,services代表业务逻辑的总目录,不同的业务逻辑可以存放在该目录下的子目录中,从而实现统一、规范的管理。在某一分支目录下创建业务逻辑,一般是由一个接口对应多个实现类的方式,每个接口也可以设置一个上层父接口,从而实现代码复用。例如:我们要对账号进行相关的业务处理,可以构建一个AccountService接口,在该接口中设置多个业务逻辑处理方法,addAccount(Account account)、findAccountById(Int id)、saveAccount(Account account)、deleteAccount(Int id),分别对应的处理添加账号,查询账号,保存账号,删除账号的业务逻辑,根据不同的分支领域这些业务的实现由不同的实现方法来实现,那就要创建不同的实现类来完成,实现类的命名一般是AccountServiceImp1、AccountServiceImp2以此类推,或者可以将Imp由具体可表示业务的简称所取代,这就要由设计团队来规范和统一管理[6]。在实现类中,每个方法会根据业务的需要调用相关的Api和数据持久化层对象,例如:需要将表示层提交的文件保存到对应的服务器目录中,这时就要对文件上传这类业务加以处理,可以通过处理List这个集合加以处理,并根据系统设定的文件存储方案保存上传文件,这些操作都需要在具体的业务逻辑实现类中来完成。

由上面的分析可知,这一层的设计规范性尤为重要,良好的规范制定将决定这层结构的设计是否符合具体项目的开发与实施,甚至是影响整个项目是否成功的关键所在,有经验的架构师和分析师会将相关的标准和规范制定清晰,并在实际的开发中对相关开发人员加以指导,强调该层次规范操作的重要性,从而保证项目的顺利实施[7]。

5  Spring的数据持久化层

数据持久化层(Data Persistence Layer)是负责将项目运行中的数据信息持久的保存起来[8],例如:用户在项目中修改了自己的信息,该信息被保存到数据库中,这一行为就是一个持久化的过程。Spring在持久化的技术上有自己独立的一套技术体系Spring Data,该套技术体系中几乎包括了现有的持久化技术的全部领域,包括Spring Data Commons、Spring Data JDBC、Spring Data JDBC Ext、Spring Data JPA、Spring Data KeyValue、Spring Data LDAP、Spring Data MonGoDB、Spring Data Redis、Spring Data REST等技术解决方案,数据库存储、非数据库存储;关系型数据库存储、非关系型数据库等等多个领域的技术解决方案Spring Data均给出了相关技术支撑。

在实际的企业级项目开发中,由于底层采用的存储方式有所不同,为满足大多数持久化操作的需求,往往采用Dao模式进行规范,也就是通过创建数据访问对象的方式加以设计,该种模式是一种典型的面相接口编程IOP(Interface-oriented programming)思维,前面业务逻辑层使用了该种模式,在数据持久化层设计中也是如此。有别于业务逻辑层的设计,数据持久化层的接口设计较为简单,一般包括增加、删除、修改、查询四类操作,较为复杂的是查询操作,可以根据实际需要设计多个具体的查询方法[9]。接口要统一的创建一个包加以管理,例如:com.gdkm.dao,com是公司名称,gdkm是项目名称,dao代表所有的数据持久化操作库。实际开发中可以为每个细致的操作设计特定的Dao層接口和具体实现类,例如:账号管理的AccountDao,在该接口中创建对应的增加、删除、修改、查询方法,save(Account account)、update(Account account)、deleteById(int id)、findById(int id)、findAll()、findByName(Stirng name),以上的方法对应添加、更新、删除、通过id查询、查询所有、通过名字查询几个方法,根据具体要求创建对应的实现类,实现类中通过调用Spring Data中的具体库来实现每个具体的方法,从而实现数据持久化操作。

6  结束语

综上所述,企业级项目开发中对可管理性、科学性、项目化等方面提出了更高的要求,坚持以实现高内聚、低耦合的Web项目为原则,将Spring项目开发分为了表示层、控制器层、业务逻辑层、数据持久化层,研究了各个层面所设计的业务领域和实现方法,着重分析了Spring的控制器层和业务逻辑层的设计原则、主要技术和实现过程,对表示层和数据持久化层进行了深入的分析和研究,从以上的研究可知使用Spring框架开发的Web项目具有技术框架成熟、层次划分清晰、组织架构鲜明、人员分工明确等特点,适合于中大型的企业级软件项目建设[10]。

参考文献

[1] Phillip Webb, Dave Syer et al, Spring Boot Reference Guide, https://spring.io/projects/spring-data, Pivotal team, 2019.

[2] wilkinsona,springboot Reporting Issues, https://github.com/ spring-projects/spring-boot,github.com, 2019.

[3] 姚云飞, 杜洪波, 梁建辉. 基于 SpringMVC 框架毕业设计管理系统设计[J]. 软件, 2018, 39(01): 91-93.

[4] 李敏. 基于struts2-hibernate-spring 的Java Web 系统国际化设计与实现[J]. 软件, 2016, 37(02): 166-169.

[5] 董恒竞. 一种企业移动应用平台架构设计[J]. 软件, 2016, 37(01): 136-138.

[6] 韩凌波. 基于mvc 架构的普法考试系统设计与实现[J]. 软件, 2015, 36(3): 132-134.

[7] 赵康, 李康, 孟晨宇, 等. 基于C/S架构的远程协助和管理系统[J]. 软件, 2015, 36(4): 14-17.

[8] 黄沛. 基于RESTful架构的科技信息共享接口系统的设计[J]. 软件, 2018, 39(7): 170-172.

[9] 陈瑞, 基于Springboot高并发Java Web开发模式[J]. 电脑编程技巧与维护, 2019(04): 27-30.

[10] 张雷, 王悦, 基于SpringBoot微服务架构下的MVC模型研究[J]. 安徽电子信息职业技术学院学报, 2018, 17(4): 1-9.

猜你喜欢

表示层
基于OSI/RM模型的5G核心网采集服务设计和实现
基于回归的抽取式摘要模型
ASP.NET三层构架解析
基于SSH框架科研管理系统的设计
ASP.NET三层架构的概念及关系分析