天天看點

建構插件式的應用程式架構(二)-訂立契約

無論是用COM的方式,還是普通DLL,抑或.NET方式來實作插件架構,首先要面臨的問題就是如何訂立契約。如同我上一篇文章講到的一樣,契約是應用程式和插件之間進行互動的依據和憑證。應用程式必須聲明我有什麼樣的功能可被插件使用,并且插件必須符合什麼條件才能被我使用。反之,插件必須要知道應用程式提供什麼樣的功能,我才能将自己的功能融入到應用程式的體系中。本系列文章主要講如何使用.NET實作插件式的應用程式架構,是以其它的方式我就不再提了。

如何使用.NET訂立契約呢?首先想到的Interface,其次是抽象類,但是在插件模式中我使用接口,因為我們是在滿足應用程式的主要目的的基礎上來提供附加的插件功能,就這一點來說,接口更靈活,更容易擴充。接下來,如何訂立契約的内容呢?這就要根據你的業務需求了,為了講解的友善,我們定義一個最最基本的插件式應用程式的插件契約。我們做一個假定,我們的應用程式是一個多文檔的應用程式,包含一個主菜單欄,一個工具欄,菜單欄可以在程式的上下左右四個方向停靠,另外還有一個狀态欄。到後邊,如果有必要,我會擴充這個應用程式,讓他本身提供更多的可供插件使用的功能。是以就目前而言,我想實作的功能就是讓插件為主程式添加工具條,菜單項并實作一些簡單的功能。

應用程式向插件提供服務有兩種方式,一種是直接再應用程式接口中聲明屬性或者方法,一種是将應用程式接口聲明成一個服務容器。我打算兩種方式都用,明确的功能就在接口中直接聲明成屬性或者方法,另外将應用程式聲明成一個服務容器,以友善插入更多的服務功能,提高應用程式的可擴充性。    

下邊是一個非常簡單的應用程式接口定義,對于我們的假定已經足夠了。

複制  儲存

插件的接口定義:

繼續閱讀