摘 要:傳統(tǒng)JavaEE架構(gòu)在開(kāi)發(fā)過(guò)程中會(huì)受到種種限制,為提高開(kāi)發(fā)的靈活性和效率,開(kāi)發(fā)人員通常采用Struts、Spring和Hibernate這種目前較為流行的輕量級(jí)Web開(kāi)發(fā)架構(gòu)。這三種開(kāi)源框架各有其自身的特點(diǎn),使用他們分別實(shí)現(xiàn)系統(tǒng)的表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)持久化層,層次間通過(guò)接口通信。采用這種集成框架模式開(kāi)發(fā)的科研管理系統(tǒng),可以降低系統(tǒng)代碼的耦合性,提高系統(tǒng)的可維護(hù)性和擴(kuò)展性。
關(guān)鍵詞:輕量級(jí)架構(gòu);SSH;表示層;業(yè)務(wù)邏輯層;持久化層
DOI:10.16640/j.cnki.37-1222/t.2016.09.225
0 引言
科研管理信息化是高校信息化建設(shè)的重要組成部分。在“數(shù)字校園”建設(shè)過(guò)程中,遇到了很多問(wèn)題,例如,由于過(guò)去建設(shè)的信息系統(tǒng),在設(shè)計(jì)時(shí)缺乏整體架構(gòu)關(guān)鍵,各部門獨(dú)立建設(shè),導(dǎo)致校園內(nèi)已建成的信息系統(tǒng)之間不能進(jìn)行信息交換,業(yè)務(wù)數(shù)據(jù)不一致,相關(guān)業(yè)務(wù)流程不能真正實(shí)現(xiàn)自動(dòng)化,給廣大師生帶來(lái)了諸多不便。在這種情況下,非常有必要建設(shè)一個(gè)基于共享數(shù)據(jù)庫(kù)的校園科研管理系統(tǒng),實(shí)現(xiàn)基礎(chǔ)數(shù)據(jù)的全部共享。本文以某高校科研管理系統(tǒng)為例,從研究系統(tǒng)的總體架構(gòu)設(shè)計(jì)、業(yè)務(wù)流程入手,分析了異構(gòu)數(shù)據(jù)庫(kù)的特點(diǎn),實(shí)現(xiàn)了基于異構(gòu)數(shù)據(jù)庫(kù)科研管理系統(tǒng)的數(shù)據(jù)共享問(wèn)題。
1 科研管理系統(tǒng)總體設(shè)計(jì)
系統(tǒng)開(kāi)發(fā)使用Java開(kāi)發(fā)平臺(tái),以MySQL為后臺(tái)數(shù)據(jù)庫(kù)的B/S架構(gòu)。采用這種成熟的結(jié)構(gòu),可以避免不必要的技術(shù)困難。
(1)總體設(shè)計(jì)架構(gòu)??蒲泄芾硐到y(tǒng)采用分層架構(gòu)體系。使用校園網(wǎng)統(tǒng)一身份認(rèn)證平臺(tái)進(jìn)行安全認(rèn)證,保證系統(tǒng)運(yùn)行的安全可靠。基于共享數(shù)據(jù)庫(kù)的科研管理系統(tǒng)能夠?yàn)楦咝?蒲泄芾硖峁┗A(chǔ)信息支持,并且學(xué)校科研相關(guān)數(shù)據(jù)能夠與全校公共數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)交互,做到真正意義上的數(shù)據(jù)共享和統(tǒng)一。
基于共享數(shù)據(jù)庫(kù)的科研管理系統(tǒng)功能結(jié)構(gòu)如下圖1所示。
(2)MVC模式??蒲泄芾硐到y(tǒng)在邏輯上采用三層MVC模式,Model(模型)、View(視圖)、Controller(控制器),這三部分以最少的耦合協(xié)同工作,從而提高應(yīng)用的可擴(kuò)展性及可維護(hù)性。在MVC模式中,事件由控制器處理,控制器根據(jù)事件的類型改變模型或視圖。
2 SSH框架結(jié)構(gòu)模型
(1)SSH架構(gòu)。SSH在JavaEE項(xiàng)目中表示了三種框架,即Spring、Struts和Hibernate。這三種框架都屬于JavaEE的開(kāi)源輕量級(jí)企業(yè)開(kāi)發(fā)框架。這里所提的“輕量級(jí)”是相對(duì)于以EJB為核心的復(fù)雜框架而言的。通過(guò)Spring耦合其他的開(kāi)原產(chǎn)品進(jìn)行合作開(kāi)發(fā),如:使用Struts框架充當(dāng)表示層,Hibernate作為持久層,完成數(shù)據(jù)對(duì)的持久化操作,采用這種結(jié)構(gòu)完成JavaEE的企業(yè)級(jí)Web開(kāi)發(fā)。
Struts是在MVC模式基礎(chǔ)上構(gòu)架的Web應(yīng)用程序的一種開(kāi)源框架。在模型-視圖-控制器基礎(chǔ)上構(gòu)建應(yīng)用程序,使用自己提供的控制器組件(ActionController類)并與其它技術(shù)結(jié)合,共同提供模型和視圖部分組件。
Struts作為表示層的成熟技術(shù)在市場(chǎng)上已經(jīng)廣泛應(yīng)用,可以很好地和Spring技術(shù)中間層緊密結(jié)合,Struts可以使用Spring提供的事務(wù)處理等特性。Spring按照資源管理的方法提供和Hibernate的集成及DAO實(shí)現(xiàn)和事物策略支持,Spring通過(guò)IOC機(jī)制和Hibernate集成,Spring能夠很好地支持開(kāi)發(fā)人員選擇對(duì)象關(guān)系映射技術(shù)。
(2)SSH架構(gòu)的科研管理系統(tǒng)的設(shè)計(jì)。SSH由3個(gè)開(kāi)源的框架組合而成,表現(xiàn)層用Struts,Struts充當(dāng)視圖層和控制層;業(yè)務(wù)層使用Spring,Spring通過(guò)控制反轉(zhuǎn)讓控制層間接調(diào)用業(yè)務(wù)邏輯層;持久層使用Hibernate框架,Hibernate充當(dāng)數(shù)據(jù)訪問(wèn)層。每個(gè)層在功能上指責(zé)明確,不與其他層混合,各層通過(guò)通信接口相互聯(lián)系。
1)Struts負(fù)責(zé)Web層。ActionFormBean對(duì)象負(fù)責(zé)接收網(wǎng)頁(yè)中表單提交的數(shù)據(jù),然后通過(guò)Action對(duì)象進(jìn)行處理,再通過(guò)Forward對(duì)象跳轉(zhuǎn)到對(duì)應(yīng)的網(wǎng)頁(yè)。其中Forward對(duì)象可以在配置文件struts-config.xml中進(jìn)行定義,定以后ActionServlet核心配置文件則會(huì)自動(dòng)讀取并進(jìn)行加載跳轉(zhuǎn)信息;2)Spring負(fù)責(zé)業(yè)務(wù)層管理,即Service對(duì)象(或者M(jìn)anager對(duì)象)Service對(duì)象為Action提供統(tǒng)計(jì)的調(diào)用接口,并且封裝持久層的DAO對(duì)象,還集成了Hibernate框架中的功能。Spring主要的任務(wù)是對(duì)所有JavaBean和事物進(jìn)行統(tǒng)一的管理;3)Hibernate負(fù)責(zé)持久化層,完成數(shù)據(jù)的增刪改查操作。
Hibernate提供對(duì)象關(guān)系映射,使用配置文件*.hbm.xml和POJO實(shí)體對(duì)象,與關(guān)系數(shù)據(jù)庫(kù)中的表形成映射關(guān)系,采用這樣的方法,解決了面向?qū)ο蟮某绦蛟O(shè)計(jì)操作關(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)的接口不匹配問(wèn)題。
在SSH框架的系統(tǒng)中,對(duì)象的調(diào)用流程是:JSP調(diào)用Action對(duì)象,Action使用Service方法進(jìn)行DAO操作,通過(guò)DAO連接Hibernate實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的增刪改查操作。Data stream通常為通過(guò)調(diào)用ActionForm組件自動(dòng)獲取用戶的數(shù)據(jù),接著Action組件將Data從ActionFormBean對(duì)象中取出(數(shù)據(jù)自動(dòng)從ActionForm組件存入ActionFormBean中),Data取出后,將其進(jìn)行封裝或者實(shí)例化,再調(diào)用業(yè)務(wù)層的實(shí)體類(業(yè)務(wù)邏輯),完成多種實(shí)體類操作后再通過(guò)Forward對(duì)象將數(shù)據(jù)定位到需要的對(duì)象或者頁(yè)面中。業(yè)務(wù)邏輯層實(shí)例化操作收到這個(gè)實(shí)體對(duì)象之后,會(huì)自動(dòng)調(diào)用DAO接口方法,進(jìn)行持久化操作,完成整個(gè)流程。
3 結(jié)束語(yǔ)
在傳統(tǒng)的JavaEE企業(yè)級(jí)開(kāi)發(fā)中,EJB一直占據(jù)著主導(dǎo)的地位,但運(yùn)行他需要一個(gè)龐大的容器,我們通常稱之為“重量級(jí)容器”。由于EJB暴露出的缺陷和復(fù)雜性,以“輕量級(jí)容器”為核心的架構(gòu)SSH組合的開(kāi)發(fā)解決了這個(gè)問(wèn)題。SSH架構(gòu)表示層使用Struts,業(yè)務(wù)層使用Spring,持久層使用Hibernate,使開(kāi)發(fā)過(guò)程更加簡(jiǎn)單、靈活,系統(tǒng)的維護(hù)也更加方便,使開(kāi)發(fā)者更關(guān)注高層業(yè)務(wù)邏輯的實(shí)現(xiàn),降低底層框架的設(shè)計(jì)考慮,提高了開(kāi)發(fā)效率。
作者簡(jiǎn)介:李鑫(1982-),女,講師,研究方向:計(jì)算機(jī)應(yīng)用技術(shù)。