外掛程式的本質在於不修改程式主體(平台)的情況下對軟體功能進行擴充與加強,當外掛程式的介面公開後,任何公司或個人都可以製作自己的外掛程式來解決一些操作上的不便或增加新的功能,也就是實現真正意義上的“隨插即用”軟體開發。平台+外掛程式軟體結構是將一個待開發的目標軟體分為兩部分,一部分為程式的主體或主架構,可定義為平台,另一部分為功能擴充或補充模組,可定義為外掛程式。
在進行軟體開發之前,是否採用平台+外掛程式結構進行軟體開發,還要依據具體的軟體需求情況進行確定,但一般來講,使用平台+外掛程式結構進行軟體設計會給所開發軟體增加新的生命力。當確定平台+外掛程式的軟體結構之後,就要分析哪些部分功能由主體完成,即平台的準系統,哪些部分功能由外掛程式完成,即需要擴充的外掛程式功能。平台所完成的功能應為一個軟體系統的核心和基礎,這些準系統即可為使用者使用,也可為外掛程式使用,就是又可以把平台準系統分為兩個部分,核心功能和外掛程式處理功能。平台的核心功能是整個軟體的重要功能,一個軟體的大部分功能因由核心功能完成。平台的外掛程式處理功能用於擴充平台和管理外掛程式,為外掛程式操縱平台和與外掛程式通訊提供標準平台擴充介面。外掛程式所完成的功能是對平台功能的擴充與補充,一般外掛程式完成系列化功能,例如:PHOTOSHOP的濾鏡外掛程式完成對圖形的特殊效果處理,這些功能都有一些共性,可以進行集中管理,並且是可以定義出標準的外掛程式介面。
為了實現平台+外掛程式結構的軟體設計需要定義兩個標準介面,一個為由平台所實現的平台擴充介面,一個為外掛程式所實現的外掛程式介面。這裡需要說明的是:平台擴充介面完全由平台實現,外掛程式只是調用和使用,外掛程式介面完全由外掛程式實現,平台也只是調用和使用。平台擴充介面實現外掛程式向平台方向的單向通訊,外掛程式通過平台擴充介面可擷取主架構的各種資源和資料,可包括各種系統控制代碼,程式內部資料以及記憶體配置等。外掛程式介面為平台向外掛程式方向的單向通訊,平台通過外掛程式介面調用外掛程式所實現的功能,讀取外掛程式處理資料等。
平台外掛程式處理功能包括外掛程式註冊、管理和調用,以及平台擴充介面的功能實現。外掛程式註冊為按照某種機制首先在系統中搜尋已安裝外掛程式,之後將搜尋到的外掛程式註冊到平台上,並在平台上產生相應的調用機制,這包括菜單選項、工具列、內部調用等。外掛程式管理完成外掛程式與平台的協調,為各外掛程式在平台上產生管理資訊以及進行外掛程式的狀態跟蹤。外掛程式調用為調用各外掛程式所實現的功能。平台外掛程式處理功能實現的另一部分功能為平台擴充介面的具體實現。
外掛程式軟體設計步驟包括:
1、 確定平台準系統和外掛程式要完成系列化功能或擴充功能;
2、 定義平台擴充介面和外掛程式介面;
3、 完成平台設計,主要是平台外掛程式處理功能;
4、 向外掛程式開發人員提供主平台程式(執行代碼),公布平台擴充介面和外掛程式要實現的介面,可能包括開發用的SDK;
5、 外掛程式開發人員按要求開發外掛程式,實現外掛程式介面,開發人員可使用提供的主平台程式測試外掛程式;
6、 主平台設計者繼續完成主平台的核心功能,並可隨時公布新增加主平台擴充介面和外掛程式介面;
7、 實現4-6步驟的良性迴圈,整個軟體系統不斷向前進化。
平台+外掛程式軟體設計的優點:
1、 實現真正意義上的軟體組件的“隨插即用”;
2、 在二進位級上整合軟體,減少大量的軟體重新編譯與發布麻煩與時間;
3、 能夠很好實現軟體模組的分工開發,能夠大量吸取他人的優長;
4、 可較好實現程式碼後置,保護智慧財產權。
外掛程式介面的認識
開發支援外掛程式功能的應用程式必須解決一個問題:如何在主程式與外掛程式間正確地互相通訊。為了在主程式與外掛程式之間能正確地互相通訊,應該先制定一套通訊標準,這套通訊標準就是介面,主程式與外掛程式只能通過制訂好的介面進行通訊。軟體開發中,介面只是定義功能並規定調用功能的形式,而不包含功能的實現。介面實質上是軟體模組的調用規範。
就開發支援外掛程式功能的應用程式而言,一般來說由主程式的開發人員來制訂介面,如果希望其他的開發人員能開發相關的外掛程式,只要公開相關介面即可。介面功能一般由外掛程式方實現。因為外掛程式的實現也要調用主程式的功能,所以介面功能也可能由主程式來實現。也就是說,主程式與外掛程式的資訊流可能是雙向的。
介面的調用規範與功能實現互相分離有一個很大的優點:儘管不同的外掛程式開發人員對同一個介面的具體實現不同,但是在主程式中對這些外掛程式的調用方式是一樣的。如果有主程式實現的介面,在不同的外掛程式中也可以用相同的使用方式調用主程式的功能。這極大的提高了應用程式的靈活性。
程式結構及其運行機制
主程式中,外掛程式管理部分用於管理外掛程式的安裝和刪除,並將所有安裝外掛程式的資訊儲存到適合的地方,例如儲存到註冊表或設定檔中。主程式啟動時,根據外掛程式的配置資訊家在外掛程式模組,然後獲得外掛程式的輸出函數或輸出類的指標並加以儲存,如果需要的話,可以向主程式增加介面介面元素,如菜單、工具條按鈕等。在主程式中當點擊與外掛程式相關聯的介面元素時,就會觸發外掛程式調用函數,在外掛程式調用函數中使用主函數種所儲存的外掛程式資訊調用外掛程式中實現的功能。在調用外掛程式輸出函數時也可以把主程式中實現的介面傳遞給外掛程式方。