国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Spring的企業(yè)級Web項目架構(gòu)設(shè)計研究

2019-10-08 06:27王悅張雷
軟件 2019年6期
關(guān)鍵詞:表示層

王悅 張雷

摘 ?要: 闡述了企業(yè)級web項目開發(fā)的需求特點,架構(gòu)設(shè)計的基本原則和思路,提出了使用多層結(jié)構(gòu)的Web項目架構(gòu)思想,分析了不同層次的業(yè)務(wù)范圍和功能特點,研究了表示層、控制器層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久化層的主要功能及面相接口編程的實現(xiàn)方案。

關(guān)鍵詞: Spring;表示層;控制器層;業(yè)務(wù)邏輯層;數(shù)據(jù)持久化層

中圖分類號: TP311. 11 ? ?文獻(xiàn)標(biāo)識碼: A ? ?DOI:10.3969/j.issn.1003-6970.2019.06.012

本文著錄格式:王悅,張雷. 基于Spring的企業(yè)級Web項目架構(gòu)設(shè)計研究[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 ?引言

伴隨著信息社會的到來,各類型的應(yīng)用系統(tǒng)不斷涌現(xiàn),在Web領(lǐng)域的應(yīng)用系統(tǒng)開發(fā)中,占據(jù)主導(dǎo)地位的JAVA技術(shù)往往采用Spring框架作為Web項目開發(fā)的主體技術(shù)。Spring框架從誕生到如今已經(jīng)經(jīng)歷了多個版本,精簡了大量配置操作,減少了J2EE的使用難度,是業(yè)界較為推崇的主流開源框架。

在企業(yè)級項目開發(fā)中,對于項目開發(fā)的可管理性、科學(xué)性、項目化等方面提出了更高的要求,由于企業(yè)級項目開發(fā)具有開發(fā)人員多、項目復(fù)雜度高等特點,為實現(xiàn)高內(nèi)聚、低耦合的原則,必須在團隊化項目開發(fā)中有一整套完整的、可分解的、易于

對接的架構(gòu)設(shè)計模型作為開發(fā)的基礎(chǔ),對架構(gòu)進(jìn)行科學(xué)、合理的分層設(shè)計,達(dá)到原子化的架構(gòu)模型設(shè)計。

1 ?基于Spring的企業(yè)級項目架構(gòu)

一般來說,基于Spring的企業(yè)級架構(gòu)分為六個層次,分別是表示層、控制器層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久化層、數(shù)據(jù)存儲層和操作系統(tǒng)層。

由圖1可知,表示層是用戶與系統(tǒng)交流的接口層,是用戶直接與系統(tǒng)進(jìn)行信息交互的重要一層,該層又可以叫做用戶接口層,簡稱UI(user interface);表示層的下面是控制器層,該層負(fù)責(zé)將表示層提交的信息處理后給到下一層業(yè)務(wù)邏輯層,同時也將業(yè)務(wù)邏輯層的結(jié)果返回給表示層,負(fù)責(zé)相關(guān)頁面的跳轉(zhuǎn)等操作;業(yè)務(wù)邏輯層是整個系統(tǒng)的核心,該層定義了系統(tǒng)的主要業(yè)務(wù)需求的實現(xiàn)與管理[1];數(shù)據(jù)持久化層是負(fù)責(zé)將系統(tǒng)信息在系統(tǒng)與數(shù)據(jù)存儲層之間的操作管理;數(shù)據(jù)存儲層一般是脫離于Web項目的獨立子系統(tǒng),常用的如MySql數(shù)據(jù)管理系統(tǒng)、Oracle數(shù)據(jù)管理系統(tǒng)等,用于對數(shù)據(jù)的存取進(jìn)行管理;操作系統(tǒng)層是項目運行的環(huán)境,負(fù)責(zé)與網(wǎng)絡(luò)、硬件之間進(jìn)行對接,是獨立于Web項目的系統(tǒng)。

2 ?Spring的表示層

Spring框架的表示層(Presentation layer)設(shè)計往往采用較為傳統(tǒng)的Html+Css+JavaScript組合或者Html+Thymeleaf組合,Html是頁面編程語言,一種標(biāo)準(zhǔn)的標(biāo)簽語言,在大多數(shù)的項目開發(fā)中,其都是一種前端開發(fā)標(biāo)準(zhǔn);Css是頁面美化的主要工具,近些年來,隨著移動設(shè)備的興起對于多設(shè)備兼容等問題的出現(xiàn),Css也推出了Css3這個版本,可以有效的解決多設(shè)備自適應(yīng)問題;JavaScript動態(tài)前端編程語言,可以實現(xiàn)實時的前后端信息交互,是目前較為流行的動態(tài)前端的主要技術(shù)[2]。

Thymeleaf是一個前后端兼顧的框架,可以將后臺代碼直接在前端頁面中調(diào)用,同時可以將前端信息直接帶入后端,結(jié)合Spring框架可以做到很好的前后端互動。其在前端的調(diào)用中一般需要在文件中添加th:標(biāo)簽,在后面加入相應(yīng)的代碼可以實現(xiàn)前后代碼的互動。在Spring項目開發(fā)中Thymeleaf是一個很好的前后端兼容框架,常常被各大項目所采用[3]。

3 ?Spring的控制器層

控制器層(Controller Layer)是MVC設(shè)計模型中的一個重要環(huán)節(jié),模型(model)、視圖(View)、控制器(Controller)是一種經(jīng)典的設(shè)計模型,其將項目開發(fā)分為了三個層次,也就是視圖、控制器、模型,在Spring框架的企業(yè)級開發(fā)中,在MVC的基礎(chǔ)上更加細(xì)致的劃分了開發(fā)層次,但是控制器層仍然采用MVC中的Controller。

Spring MVC框架是Spring技術(shù)體系滿足Web項目開發(fā)中采用MVC架構(gòu)時所設(shè)計的一個專用框架,在該框架下,開發(fā)人員可以使用豐富的庫資源實現(xiàn)表示層與控制器層之間的交互,滿足前后端信息的傳遞與處理[4]。在Spring MVC框架中常常使用Annotation的方式聲明控制器類,該種情況下的控制器工作流程是,用戶通過表示層傳遞過來的請求信息將被DispatcherServlet控制器攔截,HandlerMapping處理映射關(guān)系,找到對應(yīng)的處理器,生產(chǎn)處理器對象及處理器攔截器,DispatcherServlet通過返回的信息選擇合適的HandlerAdapter(處理適配器),HandlerAdapter調(diào)用并執(zhí)行Handler(這里就是后端控制器,也就是開發(fā)人員開發(fā)的注解Controller類),Handler按照程序執(zhí)行處理后,將返回一個ModelAndView對象,該對象包含對應(yīng)的返回結(jié)果前端視圖,DispatcherServlet根據(jù)該前端視圖將結(jié)果返回,前端渲染視圖展示結(jié)果。

DispatcherServlet的配置有兩種方式,Xml和Annotation兩種,Xml配置較為常用,其在Web.xml文件中添加對應(yīng)的標(biāo)簽。

……

org.springframework.web.servlet. DispatcherServlet

contextConfigLocation

/WEB-INF/myspring/ dispatcherConfigs.xml

1

1確保Web一旦啟動首先運行該Servlet,由此可以使得Dispatcher Servlet第一個被調(diào)用,從而攔截所有Web請求;Annotation的方式是通過實現(xiàn)包org.springframework. web中的接口WebApplicationInitializer,并且實現(xiàn)其onStartup()方法,使用XmlWebApplicationContext創(chuàng)建上下文對象context,通過該對象設(shè)置配置文件路徑,使用ServletRegistration.Dynamic創(chuàng)建dispatcher對象,由該對象設(shè)置加載優(yōu)先級為1,保證當(dāng)Web啟動時首個啟動該Servlet,并且由“/”設(shè)置攔截所有請求[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的核心是一個配置文件,該文件被存儲在類路徑下,該文件負(fù)責(zé)將DispatcherServlet攔截下來的Web請求加以分類處理,例如:根據(jù)擴展名的不同交由不同的后端控制器處理,一般該配置文件由兩種配置方案處理,一種是使用該配置文件的Xml配置方式,另一種是由Annotation注解的方式加以處理,但是第二種方案仍然需要Spring MVC配置文件的存在。

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

……

……

上面是一個簡單的Spring MVC配置文件,其中的元素表示,當(dāng)有結(jié)尾為firstController的請求時,由cm.springmvc.controller.FirstController該類加以處理,F(xiàn)irstController是控制器類。以上這個是一個有Xml配置的Spring MVC示例,當(dāng)有多個控制器需要處理時,這種方式就會顯得較為臃腫,使用Annotation注解的方式實現(xiàn)控制器的注冊是企業(yè)級項目開發(fā)中常常被采用的一種方案,其實現(xiàn)更為靈活,不會增加整個配置文件的負(fù)擔(dān),只需要在Spring MVC的配置文件添加,在該包下面由@Controller注解標(biāo)注的控制器類就會被檢索到,當(dāng)我們需要添加新的控制器時只需在該包下創(chuàng)建新的類即可滿足項目需求,從而簡化項目開發(fā)的管理成本。

4 ?Spring的業(yè)務(wù)邏輯層

業(yè)務(wù)邏輯層(Business Logic Layer)是企業(yè)開發(fā)的核心層,是考驗一個項目是否成功的關(guān)鍵所在,其接受上層控制器層傳遞的信息、命令,調(diào)用相關(guān)的算法、下層的數(shù)據(jù)持久化層完成相關(guān)業(yè)務(wù)的處理,并將結(jié)果返回給控制器層,該層是整個Web項目的核心,控制中樞,在很多大的Web項目中該層都是由設(shè)計人員首要考慮完成、豐富和實現(xiàn)的內(nèi)容,由于業(yè)務(wù)邏輯層由業(yè)務(wù)而生,不同的業(yè)務(wù)有不同的需求,所以在Spring框架中并未設(shè)置專屬的類庫加以封裝,而是由設(shè)計者采用面向接口編程IOP(Interface-oriented programming)的思維模式設(shè)計而成,基本思路是,將業(yè)務(wù)中需要實現(xiàn)的方法統(tǒng)一的由一個Service接口來管理,方法具體實現(xiàn)的內(nèi)容則由實現(xiàn)該接口的類來實現(xiàn),接口可以設(shè)置某一業(yè)務(wù)領(lǐng)域的統(tǒng)一方法名,分支領(lǐng)域的業(yè)務(wù)實現(xiàn)有所不同,可以為每個分支領(lǐng)域設(shè)置一個實現(xiàn)類來實現(xiàn)相關(guān)方法,從而實現(xiàn)“思想統(tǒng)一,但具體事情具體分析”的特性。

從目錄結(jié)構(gòu)來講,業(yè)務(wù)邏輯會有一個統(tǒng)一的包,往往采用services結(jié)尾,例如:com.gdkm.services,其中com是公司的簡稱,gdkm是項目的簡稱,services代表業(yè)務(wù)邏輯的總目錄,不同的業(yè)務(wù)邏輯可以存放在該目錄下的子目錄中,從而實現(xiàn)統(tǒng)一、規(guī)范的管理。在某一分支目錄下創(chuàng)建業(yè)務(wù)邏輯,一般是由一個接口對應(yīng)多個實現(xiàn)類的方式,每個接口也可以設(shè)置一個上層父接口,從而實現(xiàn)代碼復(fù)用。例如:我們要對賬號進(jìn)行相關(guān)的業(yè)務(wù)處理,可以構(gòu)建一個AccountService接口,在該接口中設(shè)置多個業(yè)務(wù)邏輯處理方法,addAccount(Account account)、findAccountById(Int id)、saveAccount(Account account)、deleteAccount(Int id),分別對應(yīng)的處理添加賬號,查詢賬號,保存賬號,刪除賬號的業(yè)務(wù)邏輯,根據(jù)不同的分支領(lǐng)域這些業(yè)務(wù)的實現(xiàn)由不同的實現(xiàn)方法來實現(xiàn),那就要創(chuàng)建不同的實現(xiàn)類來完成,實現(xiàn)類的命名一般是AccountServiceImp1、AccountServiceImp2以此類推,或者可以將Imp由具體可表示業(yè)務(wù)的簡稱所取代,這就要由設(shè)計團隊來規(guī)范和統(tǒng)一管理[6]。在實現(xiàn)類中,每個方法會根據(jù)業(yè)務(wù)的需要調(diào)用相關(guān)的Api和數(shù)據(jù)持久化層對象,例如:需要將表示層提交的文件保存到對應(yīng)的服務(wù)器目錄中,這時就要對文件上傳這類業(yè)務(wù)加以處理,可以通過處理List這個集合加以處理,并根據(jù)系統(tǒng)設(shè)定的文件存儲方案保存上傳文件,這些操作都需要在具體的業(yè)務(wù)邏輯實現(xiàn)類中來完成。

由上面的分析可知,這一層的設(shè)計規(guī)范性尤為重要,良好的規(guī)范制定將決定這層結(jié)構(gòu)的設(shè)計是否符合具體項目的開發(fā)與實施,甚至是影響整個項目是否成功的關(guān)鍵所在,有經(jīng)驗的架構(gòu)師和分析師會將相關(guān)的標(biāo)準(zhǔn)和規(guī)范制定清晰,并在實際的開發(fā)中對相關(guān)開發(fā)人員加以指導(dǎo),強調(diào)該層次規(guī)范操作的重要性,從而保證項目的順利實施[7]。

5 ?Spring的數(shù)據(jù)持久化層

數(shù)據(jù)持久化層(Data Persistence Layer)是負(fù)責(zé)將項目運行中的數(shù)據(jù)信息持久的保存起來[8],例如:用戶在項目中修改了自己的信息,該信息被保存到數(shù)據(jù)庫中,這一行為就是一個持久化的過程。Spring在持久化的技術(shù)上有自己獨立的一套技術(shù)體系Spring Data,該套技術(shù)體系中幾乎包括了現(xiàn)有的持久化技術(shù)的全部領(lǐng)域,包括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等技術(shù)解決方案,數(shù)據(jù)庫存儲、非數(shù)據(jù)庫存儲;關(guān)系型數(shù)據(jù)庫存儲、非關(guān)系型數(shù)據(jù)庫等等多個領(lǐng)域的技術(shù)解決方案Spring Data均給出了相關(guān)技術(shù)支撐。

在實際的企業(yè)級項目開發(fā)中,由于底層采用的存儲方式有所不同,為滿足大多數(shù)持久化操作的需求,往往采用Dao模式進(jìn)行規(guī)范,也就是通過創(chuàng)建數(shù)據(jù)訪問對象的方式加以設(shè)計,該種模式是一種典型的面相接口編程IOP(Interface-oriented programming)思維,前面業(yè)務(wù)邏輯層使用了該種模式,在數(shù)據(jù)持久化層設(shè)計中也是如此。有別于業(yè)務(wù)邏輯層的設(shè)計,數(shù)據(jù)持久化層的接口設(shè)計較為簡單,一般包括增加、刪除、修改、查詢四類操作,較為復(fù)雜的是查詢操作,可以根據(jù)實際需要設(shè)計多個具體的查詢方法[9]。接口要統(tǒng)一的創(chuàng)建一個包加以管理,例如:com.gdkm.dao,com是公司名稱,gdkm是項目名稱,dao代表所有的數(shù)據(jù)持久化操作庫。實際開發(fā)中可以為每個細(xì)致的操作設(shè)計特定的Dao層接口和具體實現(xiàn)類,例如:賬號管理的AccountDao,在該接口中創(chuàng)建對應(yīng)的增加、刪除、修改、查詢方法,save(Account account)、update(Account account)、deleteById(int id)、findById(int id)、findAll()、findByName(Stirng name),以上的方法對應(yīng)添加、更新、刪除、通過id查詢、查詢所有、通過名字查詢幾個方法,根據(jù)具體要求創(chuàng)建對應(yīng)的實現(xiàn)類,實現(xiàn)類中通過調(diào)用Spring Data中的具體庫來實現(xiàn)每個具體的方法,從而實現(xiàn)數(shù)據(jù)持久化操作。

6 ?結(jié)束語

綜上所述,企業(yè)級項目開發(fā)中對可管理性、科學(xué)性、項目化等方面提出了更高的要求,堅持以實現(xiàn)高內(nèi)聚、低耦合的Web項目為原則,將Spring項目開發(fā)分為了表示層、控制器層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久化層,研究了各個層面所設(shè)計的業(yè)務(wù)領(lǐng)域和實現(xiàn)方法,著重分析了Spring的控制器層和業(yè)務(wù)邏輯層的設(shè)計原則、主要技術(shù)和實現(xiàn)過程,對表示層和數(shù)據(jù)持久化層進(jìn)行了深入的分析和研究,從以上的研究可知使用Spring框架開發(fā)的Web項目具有技術(shù)框架成熟、層次劃分清晰、組織架構(gòu)鮮明、人員分工明確等特點,適合于中大型的企業(yè)級軟件項目建設(shè)[10]。

參考文獻(xiàn)

[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 框架畢業(yè)設(shè)計管理系統(tǒng)設(shè)計[J]. 軟件, 2018, 39(01): 91-93.

[4] 李敏. 基于struts2-hibernate-spring 的Java Web 系統(tǒng)國際化設(shè)計與實現(xiàn)[J]. 軟件, 2016, 37(02): 166-169.

[5] 董恒競. 一種企業(yè)移動應(yīng)用平臺架構(gòu)設(shè)計[J]. 軟件, 2016, 37(01): 136-138.

[6] 韓凌波. 基于mvc 架構(gòu)的普法考試系統(tǒng)設(shè)計與實現(xiàn)[J]. 軟件, 2015, 36(3): 132-134.

[7] 趙康, 李康, 孟晨宇, 等. 基于C/S架構(gòu)的遠(yuǎn)程協(xié)助和管理系統(tǒng)[J]. 軟件, 2015, 36(4): 14-17.

[8] 黃沛. 基于RESTful架構(gòu)的科技信息共享接口系統(tǒng)的設(shè)計[J]. 軟件, 2018, 39(7): 170-172.

[9] 陳瑞, 基于Springboot高并發(fā)Java Web開發(fā)模式[J]. 電腦編程技巧與維護, 2019(04): 27-30.

[10] 張雷, 王悅, 基于SpringBoot微服務(wù)架構(gòu)下的MVC模型研究[J]. 安徽電子信息職業(yè)技術(shù)學(xué)院學(xué)報, 2018, 17(4): 1-9.

猜你喜歡
表示層
基于OSI/RM模型的5G核心網(wǎng)采集服務(wù)設(shè)計和實現(xiàn)
基于回歸的抽取式摘要模型
ASP.NET三層構(gòu)架解析
基于SSH框架科研管理系統(tǒng)的設(shè)計
ASP.NET三層架構(gòu)的概念及關(guān)系分析