劉 艷
(安徽信息工程學(xué)院,安徽 蕪湖 241000)
軟件架構(gòu)是一系列相關(guān)的抽象模式,用于指導(dǎo)大型軟件系統(tǒng)的設(shè)計(jì)。良好的軟件架構(gòu)能幫助項(xiàng)目管理人員更好地管理時(shí)間和預(yù)算,預(yù)防項(xiàng)目后期很多的維護(hù)問題的出現(xiàn)。軟件架構(gòu)的可擴(kuò)展性是指軟件適應(yīng)環(huán)境變化的能力??蓴U(kuò)展性是指在面臨環(huán)境變化時(shí),軟件不需要改變核心的架構(gòu),只需要經(jīng)過少量的改動(dòng)就能滿足用戶的需求。如果架構(gòu)在設(shè)計(jì)早期沒有考慮過這些需求,那么就需要修復(fù)架構(gòu)的設(shè)計(jì)甚至?xí)频拐麄€(gè)架構(gòu)。最后,達(dá)到為了實(shí)現(xiàn)新需求而重新開發(fā)一套軟件的局面,給軟件項(xiàng)目的成本和風(fēng)險(xiǎn)控制帶來了不利的影響。在軟件架構(gòu)發(fā)展的過程中,出現(xiàn)了一些典型的軟件架構(gòu),比如,MVC,事件驅(qū)動(dòng)架構(gòu)以及微核架構(gòu)等。
MVC全名是 Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫。它是一種軟件架構(gòu)的典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個(gè)部件里面,在改進(jìn)和個(gè)性化定制界面及用戶交互的同時(shí),不需要重新編寫業(yè)務(wù)邏輯。這種架構(gòu)的優(yōu)點(diǎn)是結(jié)構(gòu)簡單,不同技能的人員可以負(fù)責(zé)不同的方面,每一層可以獨(dú)立測試,其他層的接口通過模擬可以解決。缺點(diǎn)是,當(dāng)環(huán)境變化時(shí),比如代碼調(diào)整或者功能增加時(shí),必須變動(dòng)每一層,導(dǎo)致擴(kuò)展很困難。
事件驅(qū)動(dòng)框架定義了一個(gè)設(shè)計(jì)和實(shí)現(xiàn)一個(gè)應(yīng)用系統(tǒng)的方法學(xué),在這個(gè)系統(tǒng)里事件可傳輸于松散耦合的組件和服務(wù)之間。它使用分布式的異步模式,事件處理器之間高度解耦,具有良好的軟件可擴(kuò)展性,性能較好,不容易產(chǎn)生堵塞。缺點(diǎn)在于由于涉及到異步編程,開發(fā)者學(xué)習(xí)起來比較困難,而且分布式和異步特性導(dǎo)致這個(gè)架構(gòu)難以測試。
微核架構(gòu)又稱為插件架構(gòu),指的是軟件的內(nèi)核相對較小,主要功能和業(yè)務(wù)邏輯都通過插件實(shí)現(xiàn)。內(nèi)核通常只包含系統(tǒng)運(yùn)行的最小功能。插件則是互相獨(dú)立的,插件之間的通信,應(yīng)該減少到最低,避免出現(xiàn)互相依賴的問題。這種架構(gòu)具有良好的功能延伸性,通過開發(fā)插件,可以適應(yīng)功能增加的需求;插件之間是隔離的,插件可以獨(dú)立的加載和卸載,測試和部署比較方便;可定制性高,適應(yīng)不同的開發(fā)需求;具有良好的文檔支持,開發(fā)者可以在很短的時(shí)間內(nèi)掌握這項(xiàng)技能。
針對傳統(tǒng)軟件架構(gòu)的缺點(diǎn),本文提出一種基于Eclipse RCP的軟件架構(gòu):首先,該軟件架構(gòu)是一種微核架構(gòu),所以具有良好的可擴(kuò)展性。第二,在測試步驟,既能獨(dú)立加載測試數(shù)據(jù)進(jìn)行測試,也能和其他模塊進(jìn)行集成測試。第三,在升級步驟,可以使用統(tǒng)一升級方式或者本地安裝包的方式升級,不會(huì)影響其他模塊的調(diào)用。第四,Eclipse整個(gè)開源社區(qū)為項(xiàng)目提供了豐富的技術(shù)和文檔支持,開發(fā)人員上手比較方便。本文第1節(jié)介紹了Eclipse RCP和它的體系結(jié)構(gòu)。第2節(jié)以實(shí)際的銀行項(xiàng)目的例子介紹了Eclipse RCP在銀行柜面軟件架構(gòu)上的應(yīng)用。最后,第3節(jié)對本文的目前工作做了總結(jié),指出下一步的研究方向。
Eclipse是一個(gè)基于Java的可擴(kuò)展的開發(fā)平臺(tái)。Eclipse的前身是Visual Age,由于其可擴(kuò)展性較差,同時(shí)又面臨其他競爭對手的產(chǎn)品壓力,IBM決定開發(fā)一個(gè)更加開放的,具有良好可擴(kuò)展性的,能更好為其開發(fā)工具提供支持的集成化平臺(tái)[1]。2000年,第一代 Eclipse誕生。Oracle,Google,Red Hat,Borland等巨頭先后踴躍成為該基金會(huì)的會(huì)員。Eclipse經(jīng)過多年的更新迭代,目前的穩(wěn)定版本號是4.7。
Eclipse RCP是一項(xiàng)位于Eclipse平臺(tái)核心的功能。它采用微核架構(gòu),提供了標(biāo)準(zhǔn)化的組件模型,目的為開發(fā)人員提供一個(gè)功能強(qiáng)大的、快速的、可擴(kuò)展性的平臺(tái)。RCP是Rich Client Platform的縮寫,即富客戶端,目標(biāo)是結(jié)合胖客戶端和瘦客戶端的優(yōu)勢并克服其固有的缺點(diǎn)。隨著Eclipse版本的迭代,Eclipse RCP平臺(tái)應(yīng)用快速增加,具有以下優(yōu)點(diǎn):
(1)可擴(kuò)展性
Eclipse基于插件進(jìn)行擴(kuò)展的思想使得用戶可以方便地搭建各種規(guī)模、類型和用途的應(yīng)用程序。按照Eclipse官方的說法,Eclipse RCP一開始就被設(shè)計(jì)為可擴(kuò)展性的。
(2)方便性
Eclipse RCP對各個(gè)平臺(tái)下的產(chǎn)品包裝提供了強(qiáng)有力的支持,其開發(fā)的RCP甚至可以在嵌入式設(shè)備、掌上電腦上運(yùn)行。由于Java語言的可移植性的特點(diǎn),Eclipse RCP也可以說是可以跨平臺(tái)運(yùn)行。
(3)統(tǒng)一升級
用戶可以通過Eclipse客戶端,使用遠(yuǎn)程或者本地方式進(jìn)行安裝更新,徹底解除了早期富客戶端應(yīng)用部署升級的麻煩。
(4)基于組件開發(fā)
基于Eclipse的系統(tǒng)由插件組成,開發(fā)人員以插件形式添加功能,在這種開發(fā)模式下,程序員可以并行開發(fā)和獨(dú)立測試,提高了程序開發(fā)的效率。
(5)良好的用戶體驗(yàn)
Eclipse為各種操作系統(tǒng)提供了本地圖形接口包。當(dāng)RCP運(yùn)行時(shí),Eclipse首先調(diào)用本機(jī)窗口組件,只有沒有本機(jī)所需組件時(shí)才進(jìn)行模擬。RCP在不同的操作系統(tǒng)上都具有一致的外觀和行為。UI設(shè)計(jì)者使用界面設(shè)計(jì)工具可以設(shè)計(jì)出漂亮的用戶界面。
Eclipse RCP平臺(tái)是運(yùn)行時(shí)內(nèi)核和插件的組合,由Workbench工作臺(tái),Workspace工作區(qū),Help幫助系統(tǒng),Team團(tuán)隊(duì)支持系統(tǒng)和Platform運(yùn)行平臺(tái)組成。
(1)Workbench工作臺(tái)
為Eclipse提供用戶界面。它是使用SWT(Standard Widget Toolkit)和JFace來構(gòu)建的;SWT是Java的Swing/AWT GUI API的非標(biāo)準(zhǔn)替代者,JFace則是建立在SWT基礎(chǔ)上,提供用戶界面組件。
(2)Workspace工作區(qū)
工作區(qū)是負(fù)責(zé)管理用戶資源的插件。包括用戶創(chuàng)建的項(xiàng)目、項(xiàng)目中的文件,以及文件變更和其它資源。工作區(qū)還負(fù)責(zé)通知其他插件關(guān)于資源變更的信息,包括文件創(chuàng)建、刪除或者變更的情況。
(3)Help幫助系統(tǒng)
幫助系統(tǒng)具有與 Eclipse平臺(tái)本身相當(dāng)?shù)目蓴U(kuò)展能力。幫助提供一個(gè)附加的導(dǎo)航結(jié)構(gòu),允許工具以HTML文件的形式添加文檔。
(4)Team團(tuán)隊(duì)支持系統(tǒng)
團(tuán)隊(duì)支持組件負(fù)責(zé)提供版本控制和配置管理支持。它根據(jù)需要添加視圖,允許用戶與
有使用的任何版本控制系統(tǒng)交互。
(5)Platform Runtime運(yùn)行平臺(tái)
是整個(gè)Eclipse的內(nèi)核,啟動(dòng)時(shí)檢查已安裝了哪些插件,并創(chuàng)建注冊表信息。為了降低啟動(dòng)時(shí)間,提高資源利用率,平臺(tái)使用“懶”加載的方式加載插件,即需要時(shí)才加載。
由于歷史原因,銀行柜面系統(tǒng)存在如下問題:字符終端展現(xiàn)能力非常有限,難以滿足低柜業(yè)務(wù)如理財(cái)、貸款、外匯等業(yè)務(wù)處理要求;柜面系統(tǒng)缺乏強(qiáng)大的平臺(tái)支持,往往占相應(yīng)項(xiàng)目開發(fā)工作量的一半以上,業(yè)務(wù)功能的更新迭代需要大量的維護(hù)工作;現(xiàn)有柜面系統(tǒng)的用戶體驗(yàn)性較差,即使是圖形界面,無法做到真正的所見即所得,二次開發(fā)的擴(kuò)展性亟待提高。在此情況下,如何設(shè)計(jì)具有良好的可擴(kuò)展性的柜面軟件架構(gòu)是需要解決的問題。
銀行柜面系統(tǒng)包含的功能模塊主要有:綜合開戶,綜合簽約,集中授權(quán),單點(diǎn)登錄,交易搜索,公告欄,常用交易,工具,便簽,郵件消息,配置,鎖屏,幫助管理,柜員管理,權(quán)限管理,日志管理等功能。同時(shí),需要兼容后期業(yè)務(wù)擴(kuò)充的需求,提供一個(gè)可擴(kuò)展性的軟件架構(gòu),能夠快速開發(fā)新的功能模塊。
銀行柜面系統(tǒng)采用Eclipse RCP插件體系結(jié)構(gòu),優(yōu)點(diǎn)如下:1)容易擴(kuò)展:獨(dú)立編譯和打包,獨(dú)立部署和測試。2)容易升級:粒度以插件為單位,降低了由于升級帶來的系統(tǒng)宕機(jī)的風(fēng)險(xiǎn);還可以節(jié)省網(wǎng)絡(luò)帶寬。
銀行柜面系統(tǒng)包括客戶端和服務(wù)端,客戶端負(fù)責(zé)接收用戶的請求,并判斷請求是否在客戶端處理范圍內(nèi),如果在,則客戶端直接處理請求并將結(jié)果返回用戶;如果不在,則轉(zhuǎn)發(fā)請求到服務(wù)端,由服務(wù)端處理完畢返回給客戶端??蛻舳撕头?wù)端采用相同的Eclipse RCP插件體系結(jié)構(gòu),包括外設(shè)模塊,交易處理模塊,統(tǒng)一配置模塊,資源模塊,通訊模塊,ESB通訊擴(kuò)展模塊等。
基于 Eclipse RCP的銀行柜面系統(tǒng)采取插件體系架構(gòu),可擴(kuò)展性比較強(qiáng)。下面介紹怎樣在Eclipse RCP平臺(tái)上完成將數(shù)據(jù)庫中的組織記錄以樹狀結(jié)構(gòu)顯示出來。
在開發(fā)階段,首先,找到數(shù)據(jù)庫的插件工程,新建一個(gè)類繼承自組件類。然后,得到輸入?yún)?shù)并轉(zhuǎn)化為符合期望的目標(biāo)類型。循環(huán)所有的組織記錄,找到組織間的層級關(guān)系,并設(shè)置組織類的關(guān)系。最后,將處理后的組織父類顯示在界面上。
在測試階段,自發(fā)給這個(gè)組件添加輸入?yún)?shù),添加斷點(diǎn),查看運(yùn)行結(jié)果是否滿足要求。
在部署階段,選擇導(dǎo)出數(shù)據(jù)庫的插件工程,然后將壓縮文件部署到銀行柜面測試系統(tǒng)中進(jìn)行測試。如果結(jié)果正確,則部署相應(yīng)的壓縮文件到生產(chǎn)系統(tǒng)中。
該類主要的源代碼如下:
// 得到輸入的記錄數(shù)組
List list = (List)command.getParameter(RECORD_LIST);
// 處理異常
if(list == null) {
throw new Exception(“傳入的數(shù)據(jù)庫記錄為 null!”);
}
// 構(gòu)建組織樹
buildTree(list);
// 界面上異步顯示
Display.asyncExec (new Runnable() {
public void run()
{
target.initTree(list);
}
});
基于 Eclipse RCP的銀行柜面軟件已經(jīng)推廣到多家銀行,事實(shí)證明,該軟件運(yùn)行穩(wěn)定,功能新增快捷,具有良好的可擴(kuò)展性。但是,由于Eclipse RCP本身使用Java語言開發(fā)插件,軟件在運(yùn)行一段時(shí)間后,性能會(huì)急劇下降,導(dǎo)致每隔一段時(shí)間需要重啟服務(wù)器。因此,找到性能瓶頸,有策略的優(yōu)化程序是下一步要研究的問題。
[1] 陳岡. Eclipse RCP應(yīng)用系統(tǒng)開發(fā)方法與實(shí)戰(zhàn), 電子工業(yè)出版社, 2007
[2] 王如迅. 基于SWTBot技術(shù)的軟件自動(dòng)化測試的研究與實(shí)現(xiàn)[J]. 軟件, 2016, 37(2): 121-128.
[3] 饒啟聰, 許丹, 蔣海洪. 健康大數(shù)據(jù)智能采集與挖掘系統(tǒng)平臺(tái)的軟件架構(gòu)實(shí)踐[J]. 軟件, 2017, 38(8): 200-203.
[4] 宮愛愛, 丁香乾, 侯瑞春. 基于Eclipse智能代碼生成框架的研究[J]. 現(xiàn)代電子技術(shù), 2013, 36(18): 55-58.
[5] 楊攀. 基于Eclipse RCP框架的地質(zhì)監(jiān)測數(shù)據(jù)可視化應(yīng)用研究[J]. 電腦與電信, 2015(3): 77-78+84.
[6] 董曉敏. 基于Eclipse RCP平臺(tái)的學(xué)校經(jīng)費(fèi)測算系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D]. 青島理工大學(xué), 2014.
[7] 孫菁. 基于Eclipse RCP的模型測試管理工具設(shè)計(jì)與實(shí)現(xiàn)[D]. 西安電子科技大學(xué), 2015.
[8] 殷新毅. 基于Eclipse RCP的中學(xué)學(xué)籍管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D]. 電子科技大學(xué), 2013.
[9] 陳東山, 陳志偉. 基于Eclipse RCP技術(shù)的0. 5T磁共振成像儀控制和數(shù)據(jù)處理軟件系統(tǒng)開發(fā)[J]. 中國醫(yī)療設(shè)備, 2015,30(7): 30-32.
[10] 于麗. 基于敏捷開發(fā)模式的軟件架構(gòu)設(shè)計(jì)[J]. 電腦知識與技術(shù), 2015, 11(6): 91-92+94.
[11] 王愛景. 敏捷開發(fā)中軟件架構(gòu)的設(shè)計(jì)與實(shí)踐[D]. 河南大學(xué), 2015.
[12] 馬麗娟. 基于軟件開發(fā)環(huán)節(jié)中軟件架構(gòu)的作用研究[J]. 電子測試, 2017(13): 69-70.
[13] 白金. 軟件架構(gòu)模式在信息系統(tǒng)開發(fā)中的應(yīng)用分析[J]. 通訊世界, 2017(10): 249-250.
[14] 王智超, 王敏, 熊燕. 軟件架構(gòu)設(shè)計(jì)之多視角分析[J]. 現(xiàn)代計(jì)算機(jī)(專業(yè)版), 2014(30): 35-37.
[15] 姜立. 軟件架構(gòu)綜合評價(jià)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 東南大學(xué), 2015.
[16] 孫志勇. 濱海?;瘓F(tuán)ERP軟件架構(gòu)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 電子科技大學(xué), 2014.