原創|其它|編輯:郝浩|2012-12-27 14:57:28.000|閱讀 273 次
概述:隨著軟件應用與領域業務結合日益緊密,業務軟件開發對可視化編程依賴性亦愈發突出,傳統 IDE 的設計理念使得基于 IF/Else 條件邏輯的支持不夠完善,隨需而變的客戶要求使得該問題亦日益嚴峻。本文從傳統 IDE 難以支持條件表達邏輯元素角度出發,提出建立支持 VIE(Visual IF/Else) 的獨立應用框架的想法,以及重用已有的編程元素來表達新的條件邏輯的思路;提出了分層框架的體系結構,以及指導實際設計開發的概念模型和實現模型;并開發了概念模型框架和基于 InstallShield 的實現模型,以及用于演示的 Demo。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
隨著軟件應用與領域業務結合日益緊密,業務軟件開發對可視化編程依賴性亦愈發突出,傳統 IDE 的設計理念使得基于 IF/Else 條件邏輯的支持不夠完善,隨需而變的客戶要求使得該問題亦日益嚴峻。本文從傳統 IDE 難以支持條件表達邏輯元素角度出發,提出建立支持 VIE(Visual IF/Else) 的獨立應用框架的想法,以及重用已有的編程元素來表達新的條件邏輯的思路;提出了分層框架的體系結構,以及指導實際設計開發的概念模型和實現模型;并開發了概念模型框架和基于 InstallShield 的實現模型,以及用于演示的 Demo。
背景
可視化編程發展
隨著計算機快速應用與發展,計算機軟件迅速普及到各行各業的各個領域,快速開發出滿足客戶需求的軟件越來越迫切,然而隨著軟件應用逐步深入到行業業務的深層,隨需而變的客戶要求也變得越來越難以滿足。古人曰:“工欲善其事,必先利其器”,基于傳統的文本編程越來越不能應對這些挑戰。功能強大的 IDE( 集成開發環境 ) 應運而生,強大的 IDE 提供了高效的可視化編程環境,不同的應用領域可視化編程環境提供的可視化程度也有所不同。有的提供了界面構造的可視化,而有的甚至提供了程序流控制的可視化編程,極大地增強了在對應的應用領域的業務開發能力,提高了應用領域信息化程度。
可視化 IF 條件邏輯編程需求
傳統的可視化 IDE 的設計理念多為編程元素可視化,即將編程中的元素轉化為多個小的可視化對象,然后開發支持可視化編輯器來編輯這些編程元素。在很多成熟的可視化編程 IDE 中,對于 IF/Else 表達邏輯采取了一種避重就輕的態度,因為 IF/Else 為程序流條件控制,并非直接的可視化編程元素,因此很多成熟的 IDE 都支持基于可視化元素的 IF 條件表達,而不能直接表達 IF/Else 邏輯。這種表達的不直接性造成了對于 IF/Else 條件邏輯 IDE 表現手法和傳統程序員程序開發習慣的大相徑庭,此外這種不直接性造成了可讀性差、復用性差、維護困難、學習困難、存在潛在風險等諸多問題,這些問題在實際的開發應用中極為明顯。隨著成熟 IDE 大量投入使用,在實際應用中這種低效率的可視化矛盾愈發突出,使 IDE 實現對于這種 IF/Else 條件邏輯表達的可視化支持也變得日益迫切。
對于已經較為成熟的 IDE,如果直接修改和增加會帶來較大的風險和難度,基于這幾點考慮,需要尋求一種間接的方式來獲得支持,使得成熟的 IDE 也能夠較為容易的支持可視化的 IF/Else 邏輯表達的開發。根據已有的開發經驗和設計理念,采用一個獨立支持 VIE(Visual IF/Else) 編程的框架和已有的 IDE 相接合使用,可以降低開發難度和風險,提高開發效率。
VIE 解決方案
面臨的問題
本文認為對于一個可視化框架而言,一般需要解決兩方面的問題,一方面在可視化方面,要提供一個足夠滿足需要的靈活的編輯器,進行高效便捷的展現和編輯可視化元素以及可視化元素之間的關系;另一方面要解決可視化編輯器背后的邏輯關系的對應,關于邏輯關系的一致性對應問題上,包括編輯器運行時的對應和系統編輯后的對應。對于編輯器運行時的對應問題,即在用戶可視化的改變編輯器中圖形元素的時候,這些操作包括拖拽、雙擊、移動、拉伸、連接等等,要靈活的響應這種處理邏輯和處理方式,保證對應的邏輯關系發生相應的改變。對于系統編輯后的對應問題,即要解決在 IDE 關閉后的邏輯關系保存,IDE 啟動后的邏輯關系讀取、生成程序的成功構建和生成程序按照設計的邏輯成功運行。
解決方案
本文論述的通用可視化 IF 條件表達語句編程框架需要和獨立的 IDE 結合使用,因此在研究框架設計解決方案的時候必須以此為前提,面對上文提及的兩方面問題,一般認為有兩種手段。其一為,改變 IDE 系統內核,從而增加新的可視化元素類型和新的可視化元素類型后的新的邏輯元素,這種解決方案要在熟悉 IDE 系統內核的基礎上,修改 IDE 代碼來支持新元素類型的添加、編輯、刪除、保存和讀取工作,并能使得生成程序在生成和運行時刻能按照設計邏輯進行運行。
另一種解決方案是充分利用已有的可視化元素和元素邏輯,構造新的邏輯結構。這種思想基于重用已有邏輯的思想,避免了因為入新元素,導致 IDE 系統內核的大量新的邏輯的修改。除了降低了這種風險,使用這種重用的思想可以有效地構建一個通用的框架予以支持,并且可以重用框架的內容,降低開發難度提高開發效率;另一方面,充分利用框架可以復用很多通用框架的元素。
對比兩種解決方案,本文采用第二種解決方案建立一個通用條件語句處理框架,依賴于該框架設計出整體的架構。通用框架叫做 VIE(Visual IF Else) 。
通用 VIE 框架設計
結構層次設計
根據分析可知,通用 VIE 框架一方面要提供核心處理邏輯的能力,并提供可視化編輯器,另一方面要提供良好的接口,可以快速的與其他系統相兼容。如圖 1 所示,VIE 框架結構分為三個層次,核心層(VIE Core),橋接層(Bridge)和環境層(Environment)。
圖 1. 結構層次設計
核心層為框架的主體部分,框架的復用和控制在本層完成。在 IDE 啟動時刻,核心層需要調用橋層獲得相應的表示邏輯;在編輯時刻,核心層解決可視化編輯器所提供的顯示編輯等功能,并提供對于編輯的邏輯的表示,并調用或者通知橋層完成和具體的環境相關操作;在運行時刻,核心層上要調用橋層獲得核心的表示邏輯,并把這種邏輯按照一定的方式進行轉換調用,從而保證按照設計執行相應的邏輯。
橋層為框架和具體的 IDE 環境對接的部分,因此完成 VIE 框架與其他 IDE 系統對接需要實現該層。在 IDE 啟動時刻,橋層要完成數據的讀取,并把數據轉化為新的邏輯數據,提供給核心層調用;在編輯時刻,橋層收到核心層的通知后把相應的邏輯轉化為相應的 IDE 識別的邏輯元素進行保存;在 IDE 關閉時刻,橋層要完成將新的邏輯元素轉化為 IDE 識別的元素按照 IDE 系統的方式進行保存;在程序生成時刻,橋層要完成生成資源的準備和識別,并打包生成程序;在運行時刻,橋層調用核心層來完成設計邏輯的運行。
環境層為一個虛擬層,不屬于框架內容,是具體的 IDE 。
核心層為系統運行的抽象層,為框架的主體部分,VIE 框架在 IDE 編輯和運行時都運行于抽象層;橋層是抽象層和運行環境的接口層,在運行時刻和編譯時刻等,橋層接受核心層的通知后,在環境層運行,執行相應的操作。
架構設計
VIE 的分層架構模型為圖 2 所示,整個分層架構模型包括概念模型和實現模型兩個部分。概念模型是對實現模型的抽象,實現模型是對概念模型的實現具象。概念模型主要為了滿足 VIE 邏輯表達需要,因此概念模型屬于抽象層的邏輯實現,不依賴于具體的 IDE,更具通用性。
實現模型是根據需要對于某個特定 IDE 予以概念模型的實現,實現模型充分利用 IDE 中對于已存在的可視化元素的支持來描述新的邏輯元素,這種表達和描述帶有機械性的直接轉換和翻譯,對于具體的邏輯含義則由概念模型來進行描述和表達,因此實現模型提供基于具體 IDE 的有效闡述,從而提供給概念層進行調用轉換。
圖 2. 多層體系架構設計
概念層模型設計包括基本 VIE 面向對象設計、可視化編輯器設計、IDE 啟動后的編輯器初始化設計、在 IDE 中的編輯操作設計、運行期的邏輯流處理設計以及在這些過程中與橋層交互等功能設計,對于概念層模型設計的品質屬性包括復用性、維護性等設計要求。
基本 VIE 表達的面向對象設計
在 IF 條件語句中,任何一個表達 True/False 邏輯的狀態的類為 VIECondition 的實現,多個 VIECondition 形成一個表達邏輯的集合,集合通過“與”,“或”來表達具體的邏輯狀態。
任何獨立執行的語句操作為一個獨立的 VIEAction,在 IF 條件語句中,包括兩個操作集合,即 True 條件下的操作集合和 False 條件下的操作集合,如果狀態集合表達的邏輯狀態為 True 則執行 True 操作集合,否則執行 False 操作集合。
根據以上論述,在 VIE 邏輯表達中,VIECondition 與 VIEAction 關系如下所示:
VIEConditionSets = {VIECondition0, VIECondition1, … , VIEConditionM, … , VIEConditionN};FalseActionSets = {VIEAction0, VIEAction1, … , VIEActionM, … , VIEActionN};TrueActionSets = {VIEAction0, VIEAction1, … , VIEActionM, … , VIEActionN};
VIEStatement 為一個操作集合,可以被有效的使用。
VIE 框架中處于核心地位的類為 VIECore,該類處理和管理條件狀態集合,True 操作集合和 False 操作集合,并負責運行時刻邏輯關系的執行處理。
根據以上設計思路和研究結果,VIE 表達的面向對象設計如圖 3 所示??紤]到設計的品質屬性,設計采用了 Superivsor-Agent[1] 模式予以實現,保證了 VIEStatement 對于 VIECore 不存在依賴,同時保證了 VIECore 對于 VIEStatement 的控制,增強了 VIEStatement 的復用性和框架內部之間狀態的可維護性。對于 VIECore 與橋接層及其他 VIE 框架外層之間的關系,采用觀察者模式[2] 予以實現,增強了核心框架的穩定性同時,保證了對于外部訪問的靈活性。
圖 3. 基本 VIE 表達的面向對象設計
VIE 獨立可視化編輯器設計
獨立編輯器設計,要獨立于具體的 IDE 開發環境,只依賴于框架的核心部分。另外 IDE 提供的編輯主要為對于 VIEAction、VIECondition、VIECore 和 VIEStatement 的編輯。編輯過程中與 VIE 框架之外部分的交互交由框架完成,從而保證了編輯器獨立于具體的 IDE 和框架外部內容,保證了代碼的穩定性。可視化編輯器的設計采用 JAVABean 方式予以實現,保證了編輯器的通用性和規范性,可以更好的和其他 IDE 相融和。可視化編輯器和 VIE 框架之間的關系如圖 4 所示。
圖 4. VIE 編輯器設計
VIE 橋層設計
VIECoreImp 為橋層與 IDE 交互的核心接口,該接口和 VIECore 之間使用橋接模式 [2] 的組合方式進行組合,解耦核心層的 VIECore 與橋層的 VIECoreImp 之間關系,使得兩者可以自由變化,提高了 VIE 框架設計的靈活性和獨立性。
由于 VIECore 為 VIE 框架的核心類,VIE 框架的所有類都通過這個類進行調用橋接的實現,理論上橋接層也必須通過 VIECore 才能與核心層進行交互,針對這些特性,VIECore 應該設計為門面模式 [2] 。此外,基于 VIECoreImp 與 VIECore 之間利用橋接模式進行組合,VIECore 如果采用類來實現的話會存在靈活性差的缺點,為退化的橋接模式。考慮到核心層可能需要優化其核心功能,改善其性能等方面品質,退化模式不利于擴展,因此 VIECore 的設計還應該采用單例模式 [2] 和工廠模式 [2] 的結合體,可以創建出多個實例,并保證了靈活性,必要的情形下,還可以設計從外部文件讀取擴展類,更高效的提高系統設計的靈活性。
在編輯時刻,ConditionPanel 和 StatementPanel 需要讀取系統的默認數據元素類型和系統配置參數,VIEUI 提供了讀取這些參數的接口。 ConditionPanel 和 StatementPanel 獨立于 VIEUI,保證了可視化編輯器獨立于具體的橋階層和 IDE 系統。
VIECoreImp 為橋接層的核心,是 VIECore 的具體 IDE 的實現,對于橋階層的數據可以有效地控制和調用。因此 VIECoreImp 與 VIEUI 之間采用工廠模式 [2] 進行設計,VIECoreImp 實現對于 VIEUI 的創建。 ConditionPanel 和 StatementPanel 對 VIEUI 的調用來自于 VIECoreCustomerizer,VIECoreCustomerizer 通過門面模式的 VIECore 調用橋層的核心實現 VIECoreImp,VIECoreImp 創建出 VIEUI 的實例。
此外對于 VIEAction 和 VIECondition,在橋層都需要予以實現,ConcreteVIEAction 和 ConcreteVIECondition 。 ConcreteVIECoreImp 類完成對 ConcreteVIEAction 和 ConcreteVIECondition 調用和創建。
VIE 框架整體設計如圖 5 所示。
圖 5. VIE 框架整體設計
如圖 6 所示為 VIE 框架的概念模型架構,VIE 框架的概念模型架構設計核心目標是在滿足準確表達 VIE 表達式結果的前提下,建立一個獨立于任何 IDE 的架構。因此,VIE 概念模型架構的設計集中于 VIE 關系的具體表達和跟橋層交互的解耦設計上,使得 VIE 框架一方面獨立于任何 IDE,另一方面又可以直接有效的和具體的 IDE 靈活交互。
圖 6. 概念模型架構設計
基于 ISMP 的框架應用實現
ISMP 簡介
ISMP(InstallShield MultiPlatform) 是一款強大的跨操作系統平臺向導平臺,提供包括產品安裝、系統環境更新、系統配置等多個應用領域,應用領域廣,提供的開發工具包功能強大,提供了多種多樣的 API 和類包,并且 ISMP 自身附帶一個功能豐富的可視化 IDE,對于一些簡單的應用,甚至于不用開發代碼即可完成,全球有無數應用程序應用 ISMP 作為向導安裝、部署、配置。
基于 ISMP 的 VIE 實現層模型設計
實現模型的實現主要集中于橋層的實現,ISMPVIECoreImp 的設計采用接口適配器模式 [2] 來實現,ISMPVIECoreImp 一方面實現 VIECoreImp 接口,準備好上層的調用;另一方面繼承自 ISMP 的 WizardAction 實現具體的和 IDE 有關的過程實現。ISMPVIECoreImp 是實現模型的關鍵部分,要完成在 IDE 系統啟動、編輯器編輯、生成程序生成、生成程序運行等時刻 VIE 框架和 ISMP 之間交互的橋接。
對于 ISMPVIECondition 和 ISMPVIEAction 的實現采用對象適配器模式 [2] 來實現。以 ISMPVIECondition 的實現為例,通過首先實現 VIECondition 接口,同時引用 WizardBeanCondition 類。這樣滿足面向對象的初衷,一方面,保證了可以復用 ISMP 中的 WizardBeanCondition 和 WizardAction;另一方面,保證了重用的 WizardBeanCondition 和 WizardAction 可以和 VIE 概念模型設計無縫相融和,不至于修改 VIE 框架概念層內核。
圖 7. ISMP 實現模型
基于 ISMP 實現模型的 VIE 框架
使用 ISMP 5.0 和 Eclipse 3.2 按照 ISMP 的實現模型開發 VIE 框架,充分重用 WizardBeanCondition/WizardAction/WizardSequence 等已有框架編程元素來表示 VIE 框架中描述的新元素類型,按照 ISMP 實現模型的設計,ISMP 實現模型的核心實現 ISMPVIECoreImp 采用接口適配器模式實現,因此對于 ISMP 的 IDE 而言 ISMPVIECoreImp 為 WizardAction,使用方式和普通 WizardAction 一樣。
為了在 ISMP 中使用 VIE 框架,需要把 ISMP 實現模型的 VIE 框架所有的進行程序編譯,然后放到 %ISMP_Root%/lib 中,最后在 IDE 中注冊 ISMPVIECoreImp,保證在 IDE 添加 WizardAction 時候的正常使用。
在 ISMP 中的 installer 頁中,點擊“ Insert …”按鈕,添加 WizardBean,在彈出對話框中選擇 ISMPVIECoreImp,點擊 OK 完成添加,然后在 installer 頁左邊的樹目錄中選中該 Action,則在構建的可視化編輯器界面
結論
本文探討了基于可視化通用框架的設計和實施的思路與方法論,根據需要可以拓展到其它可視化編程的領域,因此對于可視化通用框架的設計和編程思路不應該局限于 VIE 的實現模型開發和編程應用。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載