2008-09-19 79 views
5

我並沒有爲特定於語言的答案尋找太多的東西,只是實現插件系統的一般模型(如果你想知道,我正在使用Python)。我有自己的想法(註冊回調,這就是它),但我知道其他人存在。通常使用什麼,還有什麼是合理的?實現插件系統有哪些不同的方式?

你說的插件系統是什麼意思?依賴注入和IOC容器聽起來像是一個很好的解決方案嗎?

我的意思是,嗯,這是一種將功能插入基本程序而不改變它的方法。我出發時無意定義它。依賴注入不看起來特別適合我在做什麼,但我不太瞭解他們。

+0

我想看看關於如何處理插件間通信的一些討論。有人使用公共事件嗎?主題空間? – 2008-09-19 08:03:13

回答

1

還有就是Software Engineering Radio,你可能有興趣在一個非常好的episode

以供將來參考,我在這裏再現了由Erich Gamma,肯特·貝克的優秀Contributing to Eclipse給「Rules for Enablers」(alternative link) 。

  • 邀請規則 - 只要有可能,讓其他人爲您的貢獻做出貢獻。
  • 延遲加載規則 - 僅在需要時加載貢獻。
  • 安全平臺規則 - 作爲擴展點的提供者,您必須保護自己免受擴展程序方面的不當行爲。
  • 公平競賽規則 - 所有的客戶都遵守相同的規則,即使是我。
  • 顯式擴展規則 - 明確聲明平臺可以擴展的位置。
  • 分集規則 - 擴展點接受多個擴展。
  • 良好的柵欄規則 - 將代碼傳遞到代碼外部時,請保護好自己。
  • 顯式API規則 - 將API與內部分離。
  • 穩定規則 - 一旦你邀請某人做出貢獻,不要改變規則。
  • 防禦性API規則 - 僅顯示您有信心的API,但要準備好在客戶端要求時展示更多API。
1

在Python中,你可以使用setuptoolspkg_resources提供的入口點系統。每個入口點應是返回有關插件的信息的功能 - 名稱,作者,安裝和拆卸功能等

2

一個簡單的插件架構可以定義所有的方法插件接口插件應該執行。該插件處理來自應用程序的事件,並可以使用應用程序的標準代碼,模型對象等來完成任務。基本上和ASP.NET窗體一樣,只是你重寫而不是實現。

沒有人教我這個部分,我不是專家,但我覺得:一般而言,插件會比它的應用程序不太穩定,因此應用程序應該始終在控制和只給行動的插件週期性機會。如果一個插件可以註冊一個觀察者,那麼應該嘗試/捕獲對該代表的調用。

0

如何abstract factory?您的基本程序定義了抽象概念如何相互作用,但調用者必須提供實現。

相關問題