訊息訂閱、派送設計模式在“平台-外掛程式”式軟體架構設計中的應用
1. 首先說明一下什麼是“平台-外掛程式”式的軟體設計。
顧名思義,“平台-外掛程式”就是先建立一個平台提供底層的基本服務,以這個平台為基礎,在後續的開發中,直接以外掛程式的方式插入這個平台中,並且是可拔插的,需要時可以插上,不需要時可以拔掉,這樣的設計非常具有靈活性和可擴充性。
舉個例子說,我們的電腦硬體,就是一個非常優秀的“平台-外掛程式”設計的範例。在電腦中,主機板就是“平台”,CPU,記憶體,硬碟,顯卡,音效卡,網卡。。。這一系列都是“外掛程式”,有時候主板本身也固化了CPU,也就是把CPU的功能整合在平台中。
2. 再來說明一下什麼是訊息訂閱、派送模式。
這個模式很容易理解,舉個例子:家裡給廈門晚報社定了一份廈門晚報(訂閱),報社在每天傍晚安排員工將報紙送到家裡(派送)。而訊息就好比這裡的報紙。
這種設計模式與一般的notify(通知)模式要區別一下,他是notify模式的一個限制版本,notify模式不需要訂閱,而只有派送,只在某個事件點將這個事件的訊息發送給接收者。但接收者並不需要事先訂閱,或者說這個訂閱的動作並不是一定由接收者預先執行。而訊息訂閱、派送設計模式要求訊息接收者必須先訂閱,有訂閱才有發送,就像報社不會無緣無故的把報紙送到你家一樣。
3. 實現原理
在以“平台-外掛程式”的設計理念中,訊息訂閱、派送設計模式非常有用,它最主要的作用是可以大大的降低耦合度,低耦合度本身就帶來非常多的好處,諸如效能,可維護性,可擴充性。因此,對我來說,低耦合,介面標準、統一,隨插即用是我在軟體設計上始終追求的目標。
有了以上的說明,應該已經使我們對“平台-外掛程式”和訊息訂閱、派送這兩個概念有了一個比較感官的,清楚的認識。那麼,下一步,我們該怎麼設計這個系統呢?
這裡需要在引入幾個概念:介面、事件、訊息。
介面,就是平台與外掛程式直接的互動口。在這裡需要包括外掛程式提供的用於平台向外掛程式發送訊息的介面,以及由平台提供的用於外掛程式向平台發送訂閱的介面。這個介面再往程式設計上具體化一點,就可以理解為多數OOP語言都支援的文法元素:介面(interface)。
事件:指的是發生在平台上一系列事件,比如系統啟動,初始化,使用者事件,系統關閉。
訊息:在這裡即是代表特定事件一個說明串。
平台在這些事件發生的時候,通過查詢相應的事件訂閱列表中的外掛程式,並將該事件所對應的訊息通過外掛程式提供的介面發送給外掛程式。外掛程式收到這些訊息的時候就可以執行相應的動作。
4. 結語
通過以上的說明,我們基本上對“平台-外掛程式”設計理念結合訊息訂閱、派送設計模式有了一個比較清楚的瞭解。在一個系統設計工作中,這是已被證明的非常重要和有效兩種設計手段。當然一個好的系統,除了要有了好的設計思想和理論,還需要有務實的行動去實踐,一個架構師或設計師的工作需要很多個開發、測試工程師在這個架構上的實踐和驗證,經過不斷考驗和磨礪出來的架構,才是一個好的架構。所以一個優秀的架構師或設計師除了要有精湛的研發技術和豐富的設計經驗以外,還需要有一顆謙虛的、願意聽取意見的心,須具有很好的團協作精神和團隊協作能力。