我設想的可擴充套件結構 外掛程式 二

2022-02-04 04:05:58 字數 1929 閱讀 7585

第一部分見:我設想的可擴充套件結構(外掛程式

) (ㄧ

)

經過一段時間的實踐,一些想法也發生了變化:

1.部署。使用軟體派送系統將外掛程式從伺服器派送到客戶端,並且將檔案存放到乙個被監控的目錄下。

2.介面。所有的外掛程式都必須實現

iplugin

介面。主程式使用此介面來操作外掛程式。

iplugin

介面包括兩個方法:

和dispose()

,execute

表示執行外掛程式中定義的動作,

dispose

則表示終止執行且釋放資源。

3.外掛程式組。除了外掛程式類要繼承乙個介面外,還將

dll檔案加乙個

assembly

級別的attribute

,用來描述該

dll檔案中外掛程式類的名字以及此外掛程式所從屬的模組名。這裡約定好在乙個

dll檔案中只包含乙個外掛程式類,並且將眾多的外掛程式人為地劃分為幾個模組(業務邏輯上的劃分)。外掛程式管理程式載入

dll檔案後讀取此

attribute

就可以知道外掛程式類的名字,而無須再遍歷

dll中所有的型別且判斷其是否支援外掛程式介面來得到外掛程式類的名字了。為了能在一定程度上讓外掛程式之間不互相影響,為乙個模組建立乙個應用程式域(

)──不把所有的外掛程式載入到同乙個應用程式域中,也不為每個外掛程式都建立乙個應用程式域。如果在同乙個應用程式域中執行外掛程式則當要新版本外掛程式來了以後,就得停掉所有的外掛程式(因為要解除安裝整個

了,所以人為將外掛程式劃分為幾組以獲得乙個平衡。

4.數字簽名。自己開發的外掛程式將使用乙個數字簽名軟體為其加入數字簽名,從而保證外掛程式管理程式不會載入不合法的外掛程式。

5.主程式和外掛程式通訊。主程式將

物件傳遞給外掛程式,從而外掛程式可以得知執行環境方面的資訊。

6.外掛程式之間的通訊。外掛程式之間一般不需要通訊。如果需要,則增加包裝類來描述該外掛程式和其它外掛程式的關係,通過該類來獲得其它外掛程式的例項,然後通過公共介面進行操作。

7.新增外掛程式以及外掛程式版本公升級。使用

filesystemwatcher

類來監控存放外掛程式的目錄a(軟體派送系統將所有外掛程式存放到此目錄),不過使用中會遇到一點麻煩:從別的目錄拷貝乙個檔案到被監控的目錄a後,會觸發

create

事件一次,

change

事件兩次(因為檔案建立時間和檔案訪問時間被修改了),而後面的兩次

change

事件不是我們想要的;為解決這個問題,我另外設立乙個目錄b,一旦被監控目錄中有檔案加入後,我就將此檔案移動到目錄b,外掛程式管理程式從目錄b中

shadow copy

外掛程式並載入之。載入的時候需要先檢查此外掛程式所屬模組的

是否已經建立了,如果有的話且是新新增的外掛程式,則在此

中載入之;如果是版本公升級的外掛程式,則解除安裝此

,然後重新建立之,再載入屬於此模組的所有外掛程式。

8.遠端控制外掛程式。遠端控制台上可以得到已載入外掛程式的資訊,包括外掛程式

dll檔案的名字,從屬的模組和外掛程式類名;並且可以發命令停掉或者刪除某個外掛程式。當客戶端收到停止外掛程式的命令後,外掛程式管理程式呼叫

iplugin

介面的dispose

方法;當收到刪除外掛程式的命令後,

外掛程式管理程式先呼叫

dispose

方法,從記憶體中解除安裝此外掛程式,最後將外掛程式檔案刪除。

9.外掛程式執行

schedule

。外掛程式分為下面幾種:(1)每次客戶端起動後都載入執行──這樣的外掛程式區分外掛程式組;

(2)擁有執行日程的外掛程式──總是在單獨的

中載入和執行。

10.動態編譯源**為

dll檔案。可以使用

compiler

,icodecompiler

和codedomprovider

來對**進行動態編譯,從而生成外掛程式的

dll檔案。不過在實際應用中恐怕這麼做意義不大。

構建可擴充套件的Web站點(二)

五,拓展開發模型 當你的開發團隊變得越來越大的時候,你可能會需要以下 1 編碼規範 對同一小組的人而言,對一種編碼風格達成共識,遠比找到完美的風格更加重要。編碼規範通常包含的規則有 縮排,空白字元,括號,注釋,命名,檔案布局,行結束符。2 測試 一種是自動測試,其中重要部分就是回歸測試。第二種就是手...

PostgreSQL中的資料結構一 可擴充套件雜湊表一

二叉樹搜尋具有對數時間的表現有個假設 輸入資料具有相當的隨機性。現在我們看雜湊表,這種資料結構,其在插入 刪除 查詢操作上也具有常數評價時間的表現,而且這種表現以統計為基礎,不依賴資料的隨機性。我們先看看pg裡的雜湊函式,再看pg裡動態雜湊表 dynmaic hashtable 我認為用 可擴充套件...

在Oracle中實現可擴充套件的多級編目結構

一 可擴充套件多級編目的定義 可擴充套件多級編目有下述特點 編目分級,上下級編目形成父子關係 任意節點可以有零到多個子節點,任意子節點有且只有乙個父節點 節點深度在理論上可以無限擴充 由上述特點可知,可擴充套件多級編目實際上是樹。二 可擴充套件多級編目的例子 windows作業系統中的檔案路徑是乙個...