999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于簡單工廠模式的SSH+ExtJs架構(gòu)泛型化研究

2015-07-07 01:12:58薛桂香任女爾閆世峰林濤
關(guān)鍵詞:定義設(shè)計

薛桂香,任女爾,閆世峰,林濤

(1.河北工業(yè)大學(xué)河北省大數(shù)據(jù)計算重點實驗室,天津 300401;2.河北工業(yè)大學(xué)計算機科學(xué)與軟件學(xué)院,天津 300401;3.天津城市一卡通有限公司技術(shù)開發(fā)部,天津 300457)

基于簡單工廠模式的SSH+ExtJs架構(gòu)泛型化研究

薛桂香1,任女爾2,閆世峰3,林濤2

(1.河北工業(yè)大學(xué)河北省大數(shù)據(jù)計算重點實驗室,天津 300401;2.河北工業(yè)大學(xué)計算機科學(xué)與軟件學(xué)院,天津 300401;3.天津城市一卡通有限公司技術(shù)開發(fā)部,天津 300457)

傳統(tǒng)的MVC軟件開發(fā)模式框架在實際的開發(fā)過程中由于存在大量相似的業(yè)務(wù)邏輯,程序繁雜而重復(fù),難以維護.本文基于簡單工廠設(shè)計模式,泛型化處理了傳統(tǒng)的SpringMVC+Spring+Hibernate框架,以ExtJs做視圖層處理并抽象通用使用模型,通過提供View-Service(視圖-服務(wù))的開發(fā)模式,降低了企業(yè)級信息管理軟件開發(fā)復(fù)雜度和開發(fā)工作量,為后期維護和團隊成員變更奠定了良好的基礎(chǔ).

Model-View-Cotraller;簡單工廠模式;SpringMVC+Spring+Hibernate+ExtJs 4;泛型化

0 概述

傳統(tǒng)的企業(yè)級J2EE信息管理軟件大多以MVC模式開發(fā),即Model-View-Controller,通過Model模型層處理后臺業(yè)務(wù)邏輯,通過View視圖層處理前臺頁面展示,通過Control控制層處理視圖層和模型層之間的數(shù)據(jù)響應(yīng).同時,為了進一步將開發(fā)精力集中到業(yè)務(wù)處理過程中,逐步發(fā)展出了今天盛行的java web框架,如struts2、springMVC等封裝處理了Servlet模型作為控制層,Hibernate在面向?qū)ο缶幊毯完P(guān)系型數(shù)據(jù)庫之間奠定了橋梁,使得通過面向?qū)ο筇幚黻P(guān)系型數(shù)據(jù)庫成為可能,Spring則以其切面編程(AOP)和依賴注入(Ioc)的容器處理策略大大降低了系統(tǒng)中靈活集成的復(fù)雜度.此外,還有半自動化持久化框架Ibatis、與JSP/Servlet高度耦合的Struts1等.在jsp處理端,出現(xiàn)了大量的javascript框架,如Jquery、ExtJs等.

在處理過程中,java后臺也分層處理成Action、Service、DAO、Entity層,分別負責交互、業(yè)務(wù)處理、數(shù)據(jù)庫持久化操作、實體類層,再加上基于接口的靈活配置以便控制各個模塊耦合性和內(nèi)聚性.但實際的軟件開發(fā)過程中,項目開發(fā)人員水平參差不齊,有些開發(fā)人員即使有良好的思維設(shè)計出色的業(yè)務(wù)但卻缺少良好的編程習(xí)慣,軟件到后期變得越來越臃腫,業(yè)務(wù)變得越來越復(fù)雜,最終無法維護.在國外,很多大型的軟件架構(gòu)往往事先封裝好部分層次,僅提供業(yè)務(wù)處理和前臺的部分實現(xiàn)給軟件開發(fā)工程師,這樣使得大多數(shù)軟件開發(fā)工程師能夠開發(fā)出相似而又規(guī)范的代碼,不但能夠使工程師完全集中精力于業(yè)務(wù)處理,還能夠方便項目后期維護和團隊成員更替.本論文在結(jié)合多種軟件框架基礎(chǔ)之上,遵循簡單工廠模式的軟件開發(fā)模式,泛型化優(yōu)化處理了SpringMVC+Spring+Hibernate框架;在此基礎(chǔ)上,抽象出了集中J2EE中常用的業(yè)務(wù)模型,在保證軟件運行效率的基礎(chǔ)上,簡化了J2EE開發(fā)的復(fù)雜性.

1 軟件架構(gòu)設(shè)計技術(shù)及原理

1.1 J2EE框架分析

MVC設(shè)計模式強制性的使web應(yīng)用頁面處理、業(yè)務(wù)邏輯計算處理和交互過程分開,將URL映射到JAVA后臺中,使得J2EE軟件工程師擁有良好的軟件開發(fā)體驗.當前市場份額較大的Struts2和SpringMVC都很好的驗證了MVC設(shè)計模式的優(yōu)勢.其中,Spring MVC對Servlet泛化參數(shù)意義、泛化返回值意義,引入了Annotation;而Struts2引入ThreadLocal模式改造為Pojo模式.Struts2雖然早于Spring MVC,但Spring MVC跟Spring設(shè)計原則一脈相承:“Open for extension,closed for modification”,而且其清晰的設(shè)計思路和處理過程更加適合與Spring集成,因此本文采用Spring MVC來構(gòu)建MVC模式.

Spring是一個切面編程AOP和依賴注入Ioc的容器框架.Sping的Ioc容器,降低了組件之間的耦合性,可以讓我們更加專注于應(yīng)用邏輯,并且降低了業(yè)務(wù)對象替換的復(fù)雜性;其對事務(wù)管理、WS提供了很好的支持;Spring對其他框架都提供了很好的支持.基于以上優(yōu)勢,Spring在對J2EE項目中的集成起到中流砥柱的作用.本框架利用輕量級Spring,可以方便的整合其他框架.

Hibernate對JDBC進行了輕量級封裝,開發(fā)人員可以輕松地利用面向?qū)ο蟮木幊趟季S操縱關(guān)系型數(shù)據(jù)庫[1].而且,其獨到的自動化處理方式和支持方言等特性是其他持久化框架無法比擬的.本框架的設(shè)計是在分析了Java web多種框架的基礎(chǔ)上,選擇了Spring-MVC、Spring、Hibernate這三種框架作為框架基礎(chǔ);在前端的頁面展示中選擇了易于上手而功能強大的EXTJS組件.以下簡稱SSHE框架.圖1為傳統(tǒng)的SSHE對MVC的支持模式.

圖1 傳統(tǒng)SSHE的MVC模式Fig.1Traditional SSHE MVC Model

圖2 傳統(tǒng)SSHE調(diào)用過程Fig.2Traditional SSHE calls procedure

在傳統(tǒng)的SSHE框架中,Jsp、Extjs負責視圖層網(wǎng)頁展示,Spring通過注入的方式輔助Spring MVC作為控制層和輔助Hibernate作為模型層的處理[2].具體調(diào)用過程及調(diào)用關(guān)系如圖2所示.

如圖2所示,以登錄舉例,當視圖層發(fā)送請求給服務(wù)器時,Spring在Controller層控制返回的頁面,如果需要處理業(yè)務(wù)邏輯,則調(diào)用Service層的方法,進一步調(diào)用Dao層的方法進行數(shù)據(jù)持久化過程.其中,可以在Service層通過切面編程的方式添加事務(wù)處理等過程[3].

1.2 簡單工廠模式

簡單工廠(Simple Factory)模式的用意在于給客戶端一個接口,可以通過接口創(chuàng)建多個產(chǎn)品族中的產(chǎn)品對象.如圖3所示,定義產(chǎn)品的接口,通過實現(xiàn)具體的產(chǎn)品可以創(chuàng)建產(chǎn)品工廠來生產(chǎn).簡單工廠模式可以以盡量少的修改量給系統(tǒng)帶來更大的可擴展型.通過簡單工廠模式,可以設(shè)計Action全自動化生產(chǎn),無需再進行繁瑣的定義和處理.

1.3 泛型化設(shè)計

泛型是Java SE 1.5中基于安全、簡單設(shè)計提出的新特性,泛型的本質(zhì)是將模糊參數(shù)的類型,也就是說把要操作的數(shù)據(jù)類型也指定為一個參數(shù),這種類型參數(shù)可以在類、接口和方法的創(chuàng)建中定義,對應(yīng)稱之為泛型類、泛型接口、泛型方法[4].泛型有類型安全、強制消除類型轉(zhuǎn)換并帶來較大的代碼優(yōu)化等優(yōu)點.支持泛型幾乎不需要類文件更改,所有的工作都在編譯時完成,編譯器生成的代碼類似于沒有使用泛型一樣,但是更能確保類型安全.在實際的eclipse開發(fā)環(huán)境中可以看到,當調(diào)用帶有泛型的類時,一旦定義,后面的代碼編寫過程即可見到其真正的類型.因此,也無需擔心在運行時是否會影響運行效率的問題,但在代碼的編寫中卻極為方便、簡單、安全.

1.4 系統(tǒng)架構(gòu)概要

傳統(tǒng)的Action無論是通過注解定義還是通過xml配置文件定義,其定義過程都較為繁雜,而且極為相似、存在濫用的情況,很多開發(fā)者將大量的業(yè)務(wù)邏輯在Action層進行處理[5].本文充分利用開源框架SSHE,固定封裝了典型的Action定義,并在此基礎(chǔ)上基于簡單工廠模式、將傳統(tǒng)的Service層抽象成全自動化生產(chǎn)過程,自動生產(chǎn)Service組件.Action交互和Service生產(chǎn)組件都以對開發(fā)者透明的方式進行.開發(fā)者僅需在頁面直接定義Spring配置的bean的id進行請求,并自動將request、session中的參數(shù)映射到Service層方法的參數(shù)中.

圖3 簡單工廠模式原理圖Fig.3Simple factory pattern diagram

2 系統(tǒng)架構(gòu)設(shè)計與實現(xiàn)

系統(tǒng)架構(gòu)基于簡單、有效、在不影響原有框架性能的基礎(chǔ)上提升軟件開發(fā)質(zhì)量的設(shè)計原則,分別在DAO層、Service層、Action層進行不同程度的封裝處理,并針對ExtJs進行了通用性設(shè)計.

2.1 Dao層設(shè)計

在Dao層,針對每個實體表都有CRUD操作,但是每個實體的CRUD都會編寫代碼,而此時引入通用Dao模式可以有效的消除重復(fù)代碼,減輕開發(fā)人員的負擔.如下所示,本系統(tǒng)封裝的Dao層處理如下:

在GenericDao接口中,通過方法泛型的形式封裝了CRUD的基本方法[6],并且提供了HQL語言、SQL語言自定義使用方法,在基本的CRUD和HQL無法滿足系統(tǒng)開發(fā)的處理情況下,可以直接調(diào)用原生SQL進行處理,增強了架構(gòu)的通用性.這些方法均可以處理所有在Hibernate進行映射的實體類,完全滿足映射處理的方式.而在使用過程中,由于架構(gòu)已經(jīng)實現(xiàn)了各個抽象方法,無需再進行持久化具體處理,也無需為參數(shù)顯式聲明集合,開發(fā)者直接調(diào)用Dao層對象的方法即可.

2.2 Service設(shè)計

為了Service層對通用業(yè)務(wù)邏輯的封裝,架構(gòu)中定義了publicinterfaceGenericService<P,R>接口,并在接口中定義了public abstract R execute(P param)方法,該方法為所有業(yè)務(wù)邏輯處理的父接口,該接口的設(shè)計基于泛型,定義了泛型P和泛型R,分別代表了業(yè)務(wù)處理的請求參數(shù)和返回參數(shù).比如,請求參數(shù)為Map類型、返回參數(shù)為List類型的業(yè)務(wù)處理定義如下接口:public interface ListService<T>extends GenericService<Map<String,String>,List<T>>.開發(fā)者可以方便的將業(yè)務(wù)邏輯放在接口的類實現(xiàn)中.

2.3 View-Service企業(yè)級架構(gòu)設(shè)計

Action層很多時候只是做一次業(yè)務(wù)轉(zhuǎn)接操作,并不需要實際的業(yè)務(wù)處理,而且操作很類似,并且在很多系統(tǒng)中都存在Action層濫用問題;此外,由于Action處理中各種畫面跳轉(zhuǎn)邏輯,以及session,request獲取問題,導(dǎo)致Action很難進行單元測試.良好的軟件開發(fā)通常是把業(yè)務(wù)邏輯抽取出來放在Service層中,以方便進行單元測試,而讓Action僅僅負責業(yè)務(wù)邏輯跳轉(zhuǎn).

圖4 本架構(gòu)的簡單工廠模式設(shè)計原理Fig.4The design principle of simple factory pattern in this architecture

圖5 通用模塊設(shè)計返回參數(shù)類Fig.5Universal module design parametersand return type class

本架構(gòu)基于簡單工廠模式進行設(shè)計,抽象出了通用Service層接口和Action處理.如圖4所示,Service層接口GenericService作為簡單工廠模式中的產(chǎn)品,具體Service生產(chǎn)則由GenericAction產(chǎn)品生產(chǎn)器進行創(chuàng)建和調(diào)用[7].換言之,當瀏覽器中發(fā)送請求url時,對外透明的GenericAction自動創(chuàng)建了響應(yīng)的Service處理.開發(fā)者在開發(fā)時,僅需在url中聲明要請求的Service方法即可實現(xiàn)對Service的調(diào)用.綜上所述,開發(fā)者可以遵循View-Service開發(fā)模式進行軟件項目開發(fā).

2.4 EXT通用模塊抽象與處理

為了降低軟件開發(fā)工作量,本架構(gòu)設(shè)計封裝了ExtJs交互通用Action.在Ext應(yīng)用中經(jīng)常使用到grid,這種數(shù)據(jù)結(jié)構(gòu)通常會需要一個list集合,還有一個記錄總數(shù);另外一種常用ext返回類型為一個boolean類型的處理標志和一個錯誤描述messgae信息.針對這兩類返回類型,通過泛型抽象實體類如圖5所示.

以上兩類Ext交互過程在Ext獲取數(shù)據(jù)時均以Ajax請求的方式進行,針對以上兩類Ext交互實體,封裝Action處理如下:

GridList類專門處理ExtJs中g(shù)ridpanal組件,比如當需要返回GridList交互實體時,首先在View頁面端請求url為“/getGridList/{serviceName}”,“{serviceName}”為Service處理類在Spring環(huán)境中配置的id.開發(fā)者僅需在Spring配置其id,并將該Service實現(xiàn)接口GenericService,在該實現(xiàn)中可以任意擴展業(yè)務(wù)邏輯.

ExecResult設(shè)計用來處理表單Form請求,比如添加一個用戶,需要返回添加是否成功以及失敗的原因信息,首先在View頁面端請求“/getExecResult/{serviceName}”,同樣需要開發(fā)者在Spring中定義和實現(xiàn)響應(yīng)的Service.

3 軟件架構(gòu)的使用原理

傳統(tǒng)的SSHE在開發(fā)過程中調(diào)用復(fù)雜,很多開發(fā)人員并不清楚Service層和Dao層業(yè)務(wù)邏輯是如何區(qū)分的,因此各個開發(fā)人員對框架的把控能力不同直接增加了后期軟件維護的難度.圖2所示情況,對應(yīng)本架構(gòu)調(diào)用關(guān)系如圖6所示.

圖6 本架構(gòu)設(shè)計的通用SSHE調(diào)用關(guān)系圖Fig.6The general SSHE call graph of our architecture design

基于本架構(gòu),開發(fā)者首先需要在View層用Jsp和Ext定義響應(yīng)的頁面展示和對應(yīng)的url請求,url中的ServiceName直接映射到Service層中的具體實現(xiàn)類.具體實現(xiàn)類中通過調(diào)用通用Dao類中的方法進行持久化數(shù)據(jù)操作.對比傳統(tǒng)的SSHE開發(fā)過程,減少了Action層處理和冗余的Dao操作代碼.不僅規(guī)范了軟件開發(fā)過程,降低軟件開發(fā)工作量,而且使得軟件開發(fā)者能夠集中精力處理頁面展示和業(yè)務(wù)邏輯處理.

4 總結(jié)

依據(jù)簡單工廠模式,對SSHE模型進行泛型化處理,設(shè)計實現(xiàn)了View-Service企業(yè)級架構(gòu)模型,在保證軟件原有性能的基礎(chǔ)上,該模型提供了自動化處理MVC中控制層,半自動化處理數(shù)據(jù)持久化過程和Service服務(wù)層的匹配,降低了J2EE軟件開發(fā)工作量和復(fù)雜度,為良好的軟件項目開發(fā)奠定了基礎(chǔ),在很大程度上方便了新成員入手和維護人員后期維護,提高了軟件開發(fā)效率和軟件質(zhì)量.

[1]秦育華.面向?qū)ο蟮臄?shù)據(jù)模型設(shè)計方法的研究與實現(xiàn)[J].電腦編程技巧與維護,2010(20):6-7.

[2]田娟,徐釗.基于J2EE的MVC設(shè)計模式的分析與思考[J].計算機與現(xiàn)代化,2010(10):54-58.

[3]陳雪娟.基于MVC模式的SSH開發(fā)技術(shù)[J].電腦學(xué)習(xí),2011(2):137-139.

[4]林帥,林雄.Java泛型研究[J].電腦開發(fā)與應(yīng)用,2012,25(3):63-65.

[5]劉萍.基于簡單工廠模式的三層架構(gòu)系統(tǒng)設(shè)計及應(yīng)用[J].中國科技信息,2013(14):107-107.

[6]蔣叢萃.JavaWeb程序運用中泛型DAO的作用[J].軟件,2012,33(5):91-92.

[7]夏齡.Spring中Bean工廠模式的改進[J].計算機應(yīng)用與軟件,2012(11):044.

[責任編輯 田豐夏紅梅]

The generic design and implementation of the frame SSH+ExtJs base on simple factory pattern

XUE Guixiang1,REN Nüer2,YAN Shifeng3,LIN Tao2

(1.Big Data Computing Key Laboratory of Hebei Province,Hebei University of Technology,Tianjin 300401,China;2.School of ComputerScienceandEngineering,Hebei Universityof Technology,Tianjin300401,China;3.DepartmentofTechnologyDevelopment, Tianjin City Card Co Ltd,Tianjin 300457,China)

The traditionalMVCsofeware development framework oftenprovidesgood programminglevel,buttheproject software become bloated and difficult to maintain in the actual development process because of the gap between software developers and the changes of team members.It makes that there is a large number of business similar in the development process.In this paper,the traditional SpringMVC+Spring+Hibernate framework is generic precessed based on simple factory pattern.The frame using ExtJs as the view layer processing frame and using the abstract universal model by providing the View-Service development mode reduces the complexity and development work of the enterprise information management software development.It has laid a good foundation for the later maintenance and the changes of team members.

model-view-cotraller;simple factory pattern;springMVC+Spring+Hibernate+ExtJs4;generic

TP311.52

A

1007-2373(2015)03-0065-05

10.14081/j.cnki.hgdxb.2015.03.013

2015-03-10

河北省高等學(xué)校科學(xué)技術(shù)研究項目(QN20131118);天津市應(yīng)用基礎(chǔ)與前沿技術(shù)研究計劃(14JCTPJC00517)

薛桂香(1979-),女(漢族),講師.通訊作者:林濤(1970-),男(漢族),教授,lintao@hebut.edu.cn.

猜你喜歡
定義設(shè)計
永遠不要用“起點”定義自己
海峽姐妹(2020年9期)2021-01-04 01:35:44
定義“風格”
何為設(shè)計的守護之道?
《豐收的喜悅展示設(shè)計》
流行色(2020年1期)2020-04-28 11:16:38
瞞天過海——仿生設(shè)計萌到家
設(shè)計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設(shè)計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
修辭學(xué)的重大定義
山的定義
主站蜘蛛池模板: 91色爱欧美精品www| 久久女人网| 国产极品美女在线| 欧美亚洲一二三区| 午夜影院a级片| 久久国产精品夜色| 国内精品小视频在线| 欧美啪啪一区| 三级毛片在线播放| 在线亚洲天堂| 亚洲综合片| 久久综合亚洲鲁鲁九月天| 国产精品自在自线免费观看| 免费一级毛片在线观看| 亚洲精品波多野结衣| 日韩黄色在线| 在线观看免费AV网| av免费在线观看美女叉开腿| 波多野结衣一区二区三区四区视频| 日本91在线| 亚洲精品老司机| 日本人妻一区二区三区不卡影院| 国产后式a一视频| 成人伊人色一区二区三区| 2018日日摸夜夜添狠狠躁| 欧美α片免费观看| 日韩视频免费| 欧美成人在线免费| 国产成人亚洲日韩欧美电影| 怡红院美国分院一区二区| 人与鲁专区| 日本不卡在线播放| 久久国产精品麻豆系列| 亚洲国产精品日韩欧美一区| 国产精品v欧美| 国产女人在线视频| 真人免费一级毛片一区二区| 伊人成色综合网| 亚洲无码高清视频在线观看| 日韩在线1| 亚洲最大福利视频网| 青青操视频免费观看| 亚洲综合狠狠| 久久精品人人做人人综合试看| 国产欧美精品一区二区| 国产黄网永久免费| 精品无码人妻一区二区| 国产精品亚欧美一区二区| 99精品热视频这里只有精品7| 国产一级毛片yw| 青青青亚洲精品国产| 日本午夜三级| 中文字幕亚洲另类天堂| 狠狠色香婷婷久久亚洲精品| 欧美色亚洲| 91精品啪在线观看国产91| 国产视频一二三区| 久久久精品无码一二三区| 国产精品女主播| 白丝美女办公室高潮喷水视频 | 69av在线| 久久黄色视频影| 久久天天躁狠狠躁夜夜躁| 制服丝袜无码每日更新| 国产视频资源在线观看| 国产成人a在线观看视频| 国产成人高清精品免费软件| 成人小视频网| 最新国产午夜精品视频成人| 国产美女无遮挡免费视频网站 | 国产欧美日韩在线一区| 免费国产高清精品一区在线| 亚洲AV人人澡人人双人| 福利视频一区| 亚洲成人网在线观看| 久青草国产高清在线视频| 久久精品国产91久久综合麻豆自制| 国产打屁股免费区网站| 99r在线精品视频在线播放| 精品亚洲麻豆1区2区3区| 久久综合色天堂av| 91欧美在线|