陳剛
[摘要]20世紀90年代以來,信息技術(shù)不斷創(chuàng)新,信息產(chǎn)業(yè)持續(xù)發(fā)展,信息網(wǎng)絡(luò)廣泛普及,信息化成為全球經(jīng)濟社會發(fā)展的顯著特征,并逐步向一場全方位的社會變革演進。進入21世紀,廣泛應(yīng)用、高度滲透的信息技術(shù)日益成為重要生產(chǎn)要素、無形資產(chǎn)和社會財富。隨著國家對信息化技術(shù)的重視,“互聯(lián)網(wǎng)+”應(yīng)用的廣泛運用,加上移動端的日益普及,促使校園軟件服務(wù)平臺的更新?lián)Q代與改造升級,使之能夠同時適應(yīng)PC端,移動端,以及未來不可預(yù)知的展示終端。校園網(wǎng)軟件平臺的框架應(yīng)具備足夠的伸縮性、擴展性和跨平臺特性。
[關(guān)鍵詞]spring;Maven;JSON;HTML5;Hybrid;跨平臺;可伸縮;可擴展
[中圖分類號]G640 [文獻標識碼]A [文章編號]1671-5918(2017)12-0024-03
doi:10.3969/j.issn.1671-5918.2017.12.011 [本刊網(wǎng)址]http:∥www.hbxb.net
學(xué)校的軟件服務(wù)平臺不僅包含企業(yè)的工作流程,還包括教師授課產(chǎn)出的智力資源共享管理以及學(xué)生相關(guān)的查詢服務(wù)。校園軟件服務(wù)平臺支撐著來自各個部門的工作需求,為全校所有人員的提供相應(yīng)服務(wù)。校園軟件服務(wù)平臺是對人事、教學(xué)、科研、管理、技術(shù)服務(wù)、生活服務(wù)、安全等各個領(lǐng)域的信息進行收集、處理、集成、保存、挖掘、傳輸和應(yīng)用,拓展校園的時間和空間,使知識資源得到充分利用和共享,使師生交流,部門協(xié)同更加方便,提高學(xué)校管理水平和工作效率,降低教學(xué)和管理成本。它是“數(shù)字校園”系統(tǒng)工程的一部分,承擔(dān)著數(shù)據(jù)保存和應(yīng)用的重要使命。隨著信息化實踐的深入,信息技術(shù)的快速更新迭代,使得早先現(xiàn)存的軟件服務(wù)體系難以兼容后期引進的現(xiàn)代化的軟件服務(wù)。最終導(dǎo)致學(xué)校遺留的軟件服務(wù)系統(tǒng)與后來引進的各種軟件服務(wù)不能很好地協(xié)同工作。這種新舊兼容性問題帶來了額外的工作量,同時暴露出很多局限性和困惑,導(dǎo)致“信息孤島”的產(chǎn)生。
信息技術(shù)日新月異,或許無法做到根治,但能在相當(dāng)長的時間中保持穩(wěn)定。校園軟件服務(wù)平臺應(yīng)該從軟件架構(gòu)上解決新舊兼容性問題,重新設(shè)計軟件服務(wù)平臺框架,保證在可以預(yù)計的10年內(nèi)持續(xù)提供服務(wù),并支持上下兼容。該框架應(yīng)解決如下問題:
(1)數(shù)據(jù)保存,讀取采用統(tǒng)一的訪問接口,屏蔽具體的數(shù)據(jù)軟件版本。
(2)軟件服務(wù)平臺必須具備跨操作系統(tǒng)平臺特性,能輕松從Windows轉(zhuǎn)向Linux等其他系統(tǒng)。
(3)軟件服務(wù)平臺具備可拆卸、組裝的項目模塊特性,既能形成整體提供服務(wù),也能拆卸出單個項目獨立運行。
(4)軟件服務(wù)應(yīng)具有統(tǒng)一的數(shù)據(jù)傳輸格式。
(5)軟件服務(wù)平臺自適應(yīng)各種終端(電腦端、移動端)。
一、系統(tǒng)結(jié)構(gòu)設(shè)計
總體上分為4層,每層只能訪問相鄰的層服務(wù),不能越層訪問。
數(shù)據(jù)庫層(含連接配置):Mysql,Oracle,Derby等各種不同廠商的不同軟件。
數(shù)據(jù)訪問層:承上啟下作用,對上層數(shù)據(jù)庫實現(xiàn)基本的CRUD原子操作,對下層提供公共的統(tǒng)一的訪問接口(基于REST風(fēng)格實現(xiàn))。
傳輸協(xié)議層:使用XML或者JSON格式作用數(shù)據(jù)傳輸?shù)膮f(xié)議。
展示終端:瀏覽器(含PC和移動端),安卓App,蘋果App,微信App等。
系統(tǒng)結(jié)構(gòu)設(shè)計示意圖如圖1-1所示:
這種四層總體設(shè)計,并不只是針對整個軟件服務(wù)體系,而是可以應(yīng)用在單個子系統(tǒng)項目中,不論是子系統(tǒng),還是服務(wù)平臺,都遵循這種設(shè)計模式,就能實現(xiàn)子系統(tǒng)項目合并和分離時對軟件服務(wù)不會造成障礙。
二、技術(shù)選型
(一)軟件結(jié)構(gòu)選型。為實現(xiàn)在任何展示終端中都能夠顯示,這里設(shè)計的結(jié)構(gòu)不再是常規(guī)意義上的B/S結(jié)構(gòu)(瀏覽器-服務(wù)器)或者C/S(客戶端-服務(wù)器)結(jié)構(gòu),而是遵循“前后分離”的模式,當(dāng)下阿里巴巴也在做這樣的事情,只不過業(yè)務(wù)不同罷了?!扒昂蠓蛛x”需要做到接口規(guī)范清晰定義,數(shù)據(jù)格式清晰定義,后端開發(fā)無需關(guān)心前端的業(yè)務(wù)邏輯,前端業(yè)務(wù)無需關(guān)心后端開發(fā)進度。兩者之間的關(guān)聯(lián)通過“數(shù)據(jù)訪問層”和“傳輸協(xié)議”進行了隔離,實現(xiàn)了“解耦”?;赗EST風(fēng)格的Web服務(wù)結(jié)構(gòu),保證了任何終端都能使用同一個后端服務(wù),不對展示前端的平臺做任何限制。
(二)軟件開發(fā)技術(shù)選型。開發(fā)技術(shù)選擇SpringMvc+Ma-yen,Spring是輕量級開源的Java開發(fā)框架,可擴展性強,不僅有自己的JPA規(guī)范,而且?guī)缀跫嫒菔忻嫔纤械臄?shù)據(jù)庫框架(如Hibernate,Mybatis等),同時全面支持REST風(fēng)格開發(fā)。選擇SpringMVC作為“數(shù)據(jù)訪問層”既安全又便捷。
(三)數(shù)據(jù)庫的選擇。遵循敏捷開發(fā)原則,逐步迭代,剛開始選擇輕量級框架和數(shù)據(jù)庫:Mybatis+Mysql;選擇MySql數(shù)據(jù)庫的作為第一首選,是因為Mysql發(fā)展很快,阿里云數(shù)據(jù)庫服務(wù)就是在開源MySql的基礎(chǔ)之上升級改造出了性能和功能超過Oracle的軟件。加之MySql提供了Cluster分布式集群數(shù)據(jù)庫,經(jīng)測試集群MySql在多個機器的內(nèi)存之間傳輸數(shù)據(jù)非???。選擇Mysql作為數(shù)據(jù)庫,在相當(dāng)長的一段時間內(nèi)不會變動。后期根據(jù)實際需求和業(yè)務(wù)需要可以考慮更換為重量級框架和數(shù)據(jù)庫:Hibernate+Oracle。
(四)軟件通信協(xié)議選擇。通常Web服務(wù)不需要通信協(xié)議,直接通過網(wǎng)頁的形式展現(xiàn)服務(wù)結(jié)果。這種方式使得服務(wù)器和前端形成高耦合,屬于強關(guān)聯(lián)關(guān)系,伸縮性低,不便于后期擴展。軟件平臺提供的服務(wù)不應(yīng)該局限于瀏覽器,它既可以是瀏覽器,也可以是桌面應(yīng)用程序,還可以是移動端App,因此在服務(wù)器和終端之間加入一層通信協(xié)議,只要能夠遵循這種協(xié)議格式,就能基本實現(xiàn)“前后分離”式的同步開發(fā)。當(dāng)前市面上比較通用的兩種數(shù)據(jù)交換格式分別是XML和JSON。JSON是一種輕量級的數(shù)據(jù)交換格式,它采用完全獨立于語言的文本格,編碼比XML簡單,結(jié)構(gòu)也更清晰,占用空間更少,節(jié)約帶寬;考慮到服務(wù)的密集型訪問帶來的寬帶消耗,大量碎片數(shù)據(jù)傳輸引起的性能消耗,通信協(xié)議的選擇更適合選擇JSON。
(五)瀏覽器前端開發(fā)技術(shù)選擇。桌面端市場主流框架有很多,比如:Bootstrap,jQueryUI,ExtJS,D0jo,Mootools,YUI等等。對于桌面端,目前Bootstrap和jQueryUI已經(jīng)可以滿足大多數(shù)的開發(fā)需求,從展示效果,美觀程度上,Bootstrap更勝一籌。Boot-strap本身是基于jQuery進行JavaScript處理,所以瀏覽器的選型使用HTML5+CSS3+Bootstrap作為基本配置。接著前端開發(fā)的另一個重要組成就是js框架。選擇js框架的參考的因素是,前端是否需要投入更多的精力,是否需要承擔(dān)更多的業(yè)務(wù)邏輯。在實現(xiàn)軟件服務(wù)平臺的“前后分離”,同時適當(dāng)分擔(dān)服務(wù)器的壓力,前端的業(yè)務(wù)邏輯不可缺少,在市面上支持MVVM模式的框架已經(jīng)三分天下:angular、vue和react。vile.js有更好的性能,并且容易優(yōu)化,語法結(jié)構(gòu)與angularjs相當(dāng)。這里選擇vue作為前端開發(fā)的MVVM框架。
(六)移動端開發(fā)技術(shù)選擇。移動端的操作系統(tǒng)陣營有:Android,IOS。以及應(yīng)用層的微信App,兩大操作系統(tǒng)完全不同,開發(fā)難度和成本都很高,我們通常開發(fā)的app軟件都屬于原生程序(使用操作系統(tǒng)的API開發(fā)的軟件),現(xiàn)在出現(xiàn)一種新技術(shù)叫做混合App開發(fā)(HyBrid),實現(xiàn)了一次編碼多平臺使用的跨平臺執(zhí)行特點。經(jīng)過實際測試,這種技術(shù)可以應(yīng)用在校園軟件服務(wù)平臺的展示端(終端)。初步選擇起步公司的Wex5開發(fā)工具。Wex5對cordova插件進行了封裝,使用HTML5技術(shù)就能自動轉(zhuǎn)換成安卓App和蘋果App。
三、數(shù)據(jù)庫層
數(shù)據(jù)庫使用mysql,相比MicrosoftSql,它是跨平臺的,對各個開發(fā)語言友好,占用空間小,性能高,首次使用可與服務(wù)器安裝在一個操作系統(tǒng)中,根據(jù)需求的變化,完全可以遷移到獨立的數(shù)據(jù)庫服務(wù)器中運行,甚至可以使用mysqlcluster集群分布式放在多個數(shù)據(jù)庫服務(wù)器中(在虛擬機云就更加方便管理),而遷移后的配置變更只需要對配置文件中的IP地址進行變更即可,遷移成本非常低,配置靈活。
四、數(shù)據(jù)訪問層和傳輸協(xié)議
(一)負責(zé)上層的連接管理。數(shù)據(jù)訪問層由SpringMVC+Maven實現(xiàn),通過配置文件訪問具體的數(shù)據(jù)庫軟件,所有與數(shù)據(jù)庫軟件由直接接觸的操作都由這一層負責(zé)連接和管理,這里使用輕量級數(shù)據(jù)庫ORM(對象關(guān)系管理)框架Mybatis統(tǒng)一管理所有的數(shù)據(jù)庫層。經(jīng)過Mybatis框架將數(shù)據(jù)庫中的表結(jié)構(gòu)轉(zhuǎn)換成Java對象,讓開發(fā)真正面向?qū)ο?,而無需考慮具體數(shù)據(jù)表結(jié)構(gòu)。
(二)提供下層訪問接口。在SpringMVC中提供controller層(MVC中的c,控制層),controller中充分使用Spring的注解語法@RequestMapping和@ResponseBody提供RESTful風(fēng)格接口服務(wù)。這是關(guān)鍵的核心所在。這種風(fēng)格是決定“前后分離”的最重要因素,是前后端同步開發(fā)的充分條件。
(三)制定接口服務(wù)規(guī)范。在SpringMVC的controller中實現(xiàn)訪問接口服務(wù)的開發(fā),同時在controller中定制服務(wù)規(guī)范,提前定義好GET/POST的使用語義,基本CRUD操作的命名規(guī)則,以及制定服務(wù)器后端的訪問權(quán)限,參數(shù)個數(shù),參數(shù)類型,返回數(shù)據(jù)的結(jié)構(gòu),前端的接收方式,接收格式。前后端都要遵循服務(wù)規(guī)范,才能無障礙通信。
(四)傳輸協(xié)議。在SpringMVC項目中添加jackson依賴關(guān)系包,Spring項目中默認支持Jackson插件,jackson插件負責(zé)將Java對象轉(zhuǎn)換成JSON字符串,這種轉(zhuǎn)換時隱式的,不需要明顯的代碼調(diào)用,只需要在依賴關(guān)系中添加jackson-core,jackson-databind,jackson-annotations三個包,然后在controller的方法頭上加入@ResponseBody就能實現(xiàn)返回數(shù)據(jù)自動轉(zhuǎn)換成JSON格式的數(shù)據(jù)。
五、展示終端層
(一)遵守服務(wù)規(guī)范。根據(jù)上層制定的訪問接口規(guī)范,展示層盡量使用非阻塞的方式訪問服務(wù),獲取返回數(shù)據(jù)。非阻塞(異步訪問)的方式最常用的就是Ajax技術(shù)。根據(jù)服務(wù)器提供的REST風(fēng)格接口地址,在前端jQuery中使用$.ajax(),$.post(),$.get()等異步方式訪問服務(wù)器接口,然后在回調(diào)函數(shù)success(data)中獲得JSON數(shù)據(jù),返回的data數(shù)據(jù)直接可以作用對象或者數(shù)組使用。解析方式遵照服務(wù)規(guī)范執(zhí)行。
(二)桌面端和移動端。作為服務(wù)型軟件系統(tǒng),對實時性要求不高,再加上移動端的瀏覽器都實現(xiàn)了HTML5的標準,在這個前提下,移動端開發(fā)技術(shù)的選擇最適合使用的是HyBrid方式——混合式開發(fā)。目前主流的開發(fā)模式無外乎三種,分別是NativeApp,WebApp,HyBridApp。
1.NativeApp,原生App,使用原生(即Android或iOS)開發(fā)的APP。
2.WebApp,就是把手機當(dāng)做一個瀏覽器。
3.HyBridApp,綜合了前面兩種技術(shù),性能和速度都介于前面兩種之間。
國內(nèi)外興起的HyBrid開發(fā)框架集成環(huán)境有:Wex5(基于PhoneGap),AppCan,DCOULD,IONIC,APICloud等等,以免費,開發(fā)速度,跨平臺作為考量指標,適合校園軟件服務(wù)平臺移動端的開發(fā)工具和開發(fā)環(huán)境是Wex5,雖然這款工具在質(zhì)量和效率上與國外還存在差距,選擇它是因為在國內(nèi)普遍需要應(yīng)用的環(huán)境有:安卓,IOS,微信平臺。而由Wex5開發(fā)的混合App同時支持桌面端的瀏覽器,幾乎前端平臺全兼容。
作為移動端的服務(wù)部署也要考慮兼容JavaWeb平臺,Spri-ngMvck框架實現(xiàn)的服務(wù)器容器JEE(常用的是Tomcat)后期可引入Apache或者Nginx做負載均衡,Wex5制作出來的軟件也是部署在Tomcat下,與整個系統(tǒng)可以融為一體。既可以直接使用瀏覽器訪問,也能通過App安裝在手機移動端訪問,一舉兩得。
關(guān)鍵配置,將JEE項目war包,放人到Wex自帶的Tomcat中,即可實現(xiàn)前端調(diào)用服務(wù)接口的實際測試。
六、項目管理
項目管理工具中Maven提供了一個插件,叫做:maven-War-plugin。這個插件的作用是實現(xiàn)子系統(tǒng)項目合并和分離的重要工具。使用maven-War-plugin插件做系統(tǒng)分隔的時候,注意下面幾個方面:
(一)將公共的功能單獨放在一個獨立的項目中,比如:登錄認證,學(xué)生公共服務(wù),教師公共服務(wù)等需要提供給多個項目使用的就單獨放在一個項目中,通過項目依賴進行組合調(diào)用,在導(dǎo)入項目依賴時,在pom.xml中配置信息將默認的war更改為jar,否則依賴關(guān)系導(dǎo)入會失敗。
(二)將項目名稱加入到插件配置文件中:在Maven主項目的pom.xml中將需要合并的其他項目的groupId和artifactId加入到配置信息中。
(三)注意合并順序,后加入的合并出現(xiàn)沖突時不覆蓋之前的文件。
批處理的使用在于同步公共項目,比如登錄認證的首頁項目。為了便于各個子系統(tǒng)測試,通過批處理的復(fù)制功能,將登錄認證同步到所有的子項目中,便于調(diào)試測試。對于其他的公共功能可以通過Maven的依賴關(guān)系導(dǎo)入。
結(jié)束語
校園軟件服務(wù)平臺是集大成者,數(shù)據(jù)的互通共享是必然的途徑,要避免信息孤島,就要實現(xiàn)數(shù)據(jù)的隔離,所有的數(shù)據(jù)訪問統(tǒng)一管理;項目的整合方式與功能分解極為相似,功能分解看做是手術(shù)刀,做的是細致的活,項目整合看做是部門分類,是粗粒度的。移動端的選型根據(jù)學(xué)校的具體情況作出選擇,通常游戲類,圖形圖畫類的最好選擇原生的開發(fā)方式,不同的操作系統(tǒng)分別開發(fā)。而應(yīng)用型的,實時性要求不高的建議使用HyBrid混合式開發(fā)。