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