程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> 平台+插件軟件設計思想及基於COM地原型完成

平台+插件軟件設計思想及基於COM地原型完成

編輯:C#基礎知識

引言:我們已經習慣於一個人獨立進行軟件開發,每個人都使用自己的風格進行程序設計,但隨著工程項目變大或者是對時間要求比較緊時,就需要幾個人,十幾個人,甚至是上百個人協作進行軟件開發與設計,這時一個比較棘手的問題就是如何將若干人所編寫的軟件代碼(有可能是鏈接庫、組件)進行無縫地集成,縱然進行源代碼集成是個比較傳統也比較成熟的方式,適當使用鏈接庫或組件,也可減少源代碼的洩露,但經常的情況是每一次的程序集成和代碼維護都需要重新編譯與鏈接源代碼和重新發布新軟件,這種工作有時又是非常麻煩的。那麼就有疑問產生,能不能有一種方法將需要開發的目標軟件分為若干功能部件,各部件之間遵循著標准接口規定,這樣在各個部件按要求開發之後,在進行整個軟件集成時只是將需要的部件進行組裝,而不是集成各源代碼或鏈接庫進行編譯與鏈接,需要新的功能組件時也是按規定開發,之後只進行組裝軟件就可以使用,這就是使用一種二進制的軟件集成方法。答案是肯定,這就是平台+插件的軟件設計方法。

一、已有的軟件系統(平台+插件)介紹與插件分類

  現在就來看一看所有軟件系統的根——操作系統(OS)。操作系統是系統軟件,是計算機不可缺少的關鍵軟件,只有安裝有操作系統的計算機才能為人所用,才能變為真正計算工具。操作系統除完成其基本功能以外,還為軟件開發人員提供了應用程序開發接口(API),軟件開發人員使用API進行軟件設計與代碼編寫,程序調試編譯以後,安裝在所依托的操作系統之後,用戶開發的軟件(可分為工具軟件和應用軟件)就可以正常運行。而這時並不需要對操作系統進行修改,也不需要重新編譯和鏈接操作系統,對於用戶軟件來說,操作系統是完全透明的。操作系統與用戶軟件是一個極好的平台+插件實例。
  除操作系統之外,在用戶軟件方面也有許多這種平台+插件的軟件系統實例,其中大名鼎鼎的就是Adobe公司的PHOTOSHOP圖形處理軟件。PHOTOSHOP除其圖形處理功能卓越以外,還有一項給開發人員印象較深的就是其插件(Plug-in)功能。為了提高圖形的處理功能PHOTOSHOP提供了標准插件開發接口,這樣第三方軟件開發商就可以按標准插件接口開發獨具特色的圖形功能擴展,開發的插件安裝後,系統即可使用,而不影響主程序和其它插件,通過此種方法PHOTOSHOP擴展了成千上萬的濾鏡(Filter)功能插件。除PHOTOSHOP外,使用插件技術的軟件還有IE,Netscape,Macromedia公司的系列軟件,以及Microsoft的Visual Studio開發工具及Office辦公軟件等。各用戶軟件領域所應用的插件技術可分為三種類型:
  1、類似批命令的簡單插件(文本插件)。事實上這種插件的自由度非常低。使用這種方法的軟件有Win Hacker等,運行這種插件後,會一步步要求用戶進行選擇/輸入,最後根據用戶的輸入來執行一系列事先定義好的操作。這種插件一般是文本文件。功能比較單一,可擴展性極小。優點是插件做起來非常方便,即使是對程序設計了解不多的人也可以制作。如WinAmp的Skin。
  2、使用一種特殊的腳本語言來實現的插件(腳本插件)。這種插件比較難寫,需要軟件開發者自己制作一個程序解釋內核。比如微軟惹了很多麻煩的宏就是這種類型的。Microsoft Office就提供了開發者用於擴展輔助功能的內置VBScript(VBA)。這種方法的優點在於無需使用其它工具來制作插件,軟件本身就可以實現,普遍出現於各種辦公自動化軟件中。
  3、利用已有的程序開發環境來制作插件(程序插件)。例如PhotoShop等軟件使用的方法。使用這種方法的軟件在程序主體中建立了多個自定義的接口,使插件能夠自由訪問程序中的各種資源。這種插件的優勢在於自由度極大,可以無限發揮插件開發者的創意,這種插件是狹義范圍的插件,也是真正意義上的插件。而這種插件機制的編寫相對復雜,對於插件接口之間的協調比較困難,插件的開發也需要專業的程序員才能進行。
  本文主要討論的是第3種類型插件,即利用已有程序開發環境制作的程序插件。

二、平台+插件軟件設計基本思想

  插件的本質在於不修改程序主體(平台)的情況下對軟件功能進行擴展與加強,當插件的接口公開後,任何公司或個人都可以制作自己的插件來解決一些操作上的不便或增加新的功能,也就是實現真正意義上的“即插即用”軟件開發。平台+插件軟件結構是將一個待開發的目標軟件分為兩部分,一部分為程序的主體或主框架,可定義為平台,另一部分為功能擴展或補充模塊,可定義為插件。
  在進行軟件開發之前,是否采用平台+插件結構進行軟件開發,還要依據具體的軟件需求情況進行確定,但一般來講,使用平台+插件結構進行軟件設計會給所開發軟件增加新的生命力。當確定平台+插件的軟件結構之後,就要分析哪些部分功能由主體完成,即平台的基本功能,哪些部分功能由插件完成,即需要擴展的插件功能。平台所完成的功能應為一個軟件系統的核心和基礎,這些基本功能即可為用戶使用,也可為插件使用,就是又可以把平台基本功能分為兩個部分,內核功能和插件處理功能。平台的內核功能是整個軟件的重要功能,一個軟件的大部分功能因由內核功能完成。平台的插件處理功能用於擴展平台和管理插件,為插件操縱平台和與插件通信提供標准平台擴展接口。插件所完成的功能是對平台功能的擴展與補充,一般插件完成系列化功能,例如:PHOTOSHOP的濾鏡插件完成對圖形的特殊效果處理,這些功能都有一些共性,可以進行集中管理,並且是可以定義出標准的插件接口。
  為了實現平台+插件結構的軟件設計需要定義兩個標准接口,一個為由平台所實現的平台擴展接口,一個為插件所實現的插件接口。這裡需要說明的是:平台擴展接口完全由平台實現,插件只是調用和使用,插件接口完全由插件實現,平台也只是調用和使用。平台擴展接口實現插件向平台方向的單向通信,插件通過平台擴展接口可獲取主框架的各種資源和數據,可包括各種系統句柄,程序內部數據以及內存分配等。插件接口為平台向插件方向的單向通信,平台通過插件接口調用插件所實現的功能,讀取插件處理數據等。
  平台插件處理功能包括插件注冊、管理和調用,以及平台擴展接口的功能實現。插件注冊為按照某種機制首先在系統中搜索已安裝插件,之後將搜索到的插件注冊到平台上,並在平台上生成相應的調用機制,這包括菜單選項、工具欄、內部調用等。插件管理完成插件與平台的協調,為各插件在平台上生成管理信息以及進行插件的狀態跟蹤。插件調用為調用各插件所實現的功能。平台插件處理功能實現的另一部分功能為平台擴展接口的具體實現。
  平台+插件軟件設計步驟包括:

1、 確定平台基本功能和插件要完成系列化功能或擴展功能;
2、 定義平台擴展接口和插件接口;
3、 完成平台設計,主要是平台插件處理功能;
4、 向插件開發者提供主平台程序(執行代碼),公布平台擴展接口和插件要實現的接口,可能包括開發用的SDK;
5、 插件開發者按要求開發插件,實現插件接口,開發者可使用提供的主平台程序測試插件;
6、 主平台設計者繼續完成主平台的內核功能,並可隨時公布新增加主平台擴展接口和插件接口;
7、 實現4-6步驟的良性循環,整個軟件系統不斷向前進化。
  平台+插件軟件設計的優點:
1、 實現真正意義上的軟件組件的“即插即用”;
2、 在二進制級上集成軟件,減少大量的軟件重新編譯與發布麻煩與時間;
3、 能夠很好實現軟件模塊的分工開發,能夠大量吸取他人的優長;
4、 可較好實現代碼隱藏,保護知識產權。
三、基於COM的原型實現
  平台+插件軟件的目標及設計思路已經明確,那麼用什麼樣的方法和技術實現插件(程序插件),從目前已有這方面軟件的設計方法來看(Windows系統上的軟件),一種是使用傳統DLL方法的實現,一種是使用COM方法的實現。下面就以COM技術為基礎,實現一個基本的原型框架設計。COM技術的原理大家都已經相當熟悉,本文為了實現平台+插件的幾方面功能,相應地采用COM的相關方面技術與方法來介紹有關實現要點。整個原型系統開發環境:Windows 2000、Visual C++ 7.0,使用的開發庫包括MFC和ATL。
  插件注冊  為了管理插件首先是設計一種插件的注冊機制,通過此種機制平台可以搜索到系統中所有的可用插件,並在平台上生成各插件的調用點。注冊就需要為每插件設置一個特殊標識,有了這個標識的插件,平台就可以使用。使用COM實現注冊機制有一種非常好的方法,這就是組件目錄(Component Category)。組件目錄也是COM實現的標准接口(Interface,不同於平台+插件中所說的接口)。在設計COM組件時,只為其定義一個目錄分類信息即可,之後就可使用標准的組件目錄接口在系統中搜索特定類型的組件,插件注冊與標識就可輕松地解決了。
  插件管理與調用 由組件目錄獲得特定標識的組件後,就需要為每個插件生成管理機制,每個插件都有一個類ID(CLSID),在平台中為每個插件生成一個類ID數組,每個插件的每一個可調用功能均生成一個菜單項(動態生成菜單項)。對每個插件是否激活,平台都有相應的記錄信息。插件調用可通過菜單消息循環或內部調用實現。
  平台擴展接口和插件接口 這兩個接口不同於COM技術中的接口,但平台擴展接口和插件接口可使用COM技術的接口定義實現。在原型系統的實現上平台擴展接口定義了一個IServer接口,插件接口定義了一個IPlugin接口。IServer接口用於為插件傳遞內部數據接口,IPlugin接口用於讀取插件功能信息,並且還用於傳遞平台消息與資源句柄。
  消息、資源與數據傳遞 平台與插件之間需要進行大量的消息與數據交互,其中包括:各種Windows消息、各種Windows資源句柄,以及系統使用的各種內部數據,有時還可能需要分配內存。所有的消息與數據交互均由平台擴展接口和插件接口所定義的標准方法實現,在原型系統中已經實現了鼠標消息、窗口句柄、設備句柄和程序內部定義數據結構的傳遞。

  結  論:原型系統已實現一種通用的平台+插件軟件開發的框架模式,通過實踐證明這種思路和設計方法可行,可以應用到我們的具體軟件開發上。通過這種方式可以很好地解決軟件合作開發與集成問題,對有版本級別的軟件開發更為有用。高級版的軟件安裝有高級版的插件,低級版的軟件不安裝高級版的插件,這就給程序分發和開發帶來極大的便利。對於有系列化功能的軟件,系列化功能由插件實現。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved