?
軟件的工業化使得軟件復用已經從通用類庫進化到了面向領域的應用框架。應用框架強調的是軟件的設計重用性和系統的課擴展性,以縮短大型應用軟件系統的開發周期,提高開發質量。應用軟件開發的未來就在于提供一個開放的體系結構,以方便中間件的選擇、組裝和集成,應用框架的重用已成為軟件開發生產中最有效的重用方式之一。面對這種發展趨勢,呼之欲出的便是一種全新的、開放性的、高擴展性的架構體系,這里我將其命名為插件式架構(或許與別人口中的插件式架構有所區別)。
?
一、插件式架構設計概述
插件式架構設計近年來非常流行,其中Eclipse起了推波助瀾的作用,提到插件式就會不由自主的想到餓Eclipse。其實插件式設計并不是什么新事物,早在幾十年前就有了。像X-Server就是基于插件式設計的,除了核心功能外,它所有的擴展功能和設備驅動都是以插件方式加入進來的。
?
基于插件的設計好處很多,把擴展功能從框架中剝離出來,降低了框架的復雜度,讓框架更容易實現。擴展功能與框架以一種很松的方式耦合,兩者在保持接口不變的情況下,可以獨立變化和發布。公開插件接口,讓第三方有機會擴展應用程序的功能,有財大家一起發。另外,還可以讓開源與閉源共存于一套軟件,你的插件是開源還是閉源,完全由你自己決定。基于插件設計并不神秘,相反它比起一團泥的設計更簡單,更容易理解。各種基于插件設計的架構都有自己的特色,但從總體架構上看,其模型都大同小異。
?
? 插件式架構設計中主要包括:插件框架、插件契約(服務)以及插件組件三部分組成。
1、插件框架:組織和管理系統插件的下載、裝載、組合、實例化以及銷毀,并提供整套完整的與后臺服務通信的操作接口等。
2、插件契約(服務):插件契約以服務接口的形式存在,系統的所有插件全部通過實現系統框架統一的接口規范,偏于有效的組織、管理插件對象。
3、插件組件:插件組件既為具體的插件程序,實現了插件契約服務的一個獨立的程序。
?
對于插件式應用框架的開發,關鍵是要識別出框架中的通用點和擴展點。基于這個原則,對于開發插件式應用框架的方法和步驟主要分以下三點:
1、分析并提取出框架中的通用點
2、分析并提取出框架中的擴展點
3、在應用框架的擴展點處根據系統配置信息動態加載實際需要的程序集(應用插件),動態創建實例對象并調用其服務。
?
二、插件式架構技術選型
在RIA(Silverlight、Flex等)技術發熱的現在,很多企業已經開始使用RIA技術解決方案進行企業管理系統建設,采用RIA技術進行系統建設的最大優點就是將后臺處理服務程序和前臺UI展現實現了完全分離,且后臺實現也不受到任何技術活平臺的限制,使系統的整體建設靈活性增強、以及提高對其他外部系統的集成能力。之所里選擇微軟RIA技術解決方案Silverlight技術來實現插件式系統架構,主要取決于以下優點:
1、Silverlight發布的動態連接庫(.dll)或程序包(.xap)更容易實現插件式架構。
2、Silverlight支撐Socket的及時消息通信。
3、Silverlight開發與Blend界面設計完美結合,更容易、快捷的實現UI風格。
4、基于HttpService/WebService/WCF的分布式通信服務借口,提高多系統異構集成能力。
5、應用統一的系統樣式,更容易、方便的實現系統多UI風格。
6、友好的全屏模式及獨特的OOB(Out-Of-Browser)模式支持。
7、更多......
?
?三、插件式架構設計的優點
可以說任何形式的架構設計實踐工作無非就是從負責、繁瑣的的研發過程中尋找一種相對方便、靈活、穩定、高擴展性的以及更加簡單的一種新型技術實現方式,從而提高項目的整體開發進度和質量,減少開發人員的工作壓力,間接的提高整個項目團隊的工作效率。
采用插件式架構設計的優點主要體現在以下幾個方面:
1)、降低系統各模塊之間的互依賴性
在進行插件式開發中,任何一個系統功能模塊、通用用戶界面以及最小的圖標等都可以插件的方式進行開發,從而提高了通用功能模塊的重用性;各個功能進行獨立開發,相互之間不存在互依賴性,使各個獨立的功能都可以單獨運行,也可以通過插件框架進行托管運行,從而提高了整個系統的靈活性;對于修改功能模塊也不會影響到其他插件模塊的正常運行,降低了系統的維護難度,提高了系統的可擴展性。
2)、系統模塊獨立開發、部署、維護
每個功能模塊都可以按照插件契約服務接口所定義的服務接口以及相關的元數據的形式當做一個插件進行獨立開發,開發完成編譯后可獨立運行,也可通過插件框架進行托管運行。理論上插件組件是不應該可以單獨運行的,按照插件式架構原理來說,必須是通過插件管家托管才能運行。實際的開發中或許會因為各種的業務需求不同而不同,具體應該如何對插件開發進行約束,還得結合實際項目需求而定。
?
3)、根據需求動態的組裝、分離系統
? 每個功能模塊都可以當做一個插件進行開發,通過統一的配置文件維護插件包的部署信息,插件框架可根據活動情況動態從服務器上下載相應的xap插件包或者是.dll的動態庫文件到客戶端進行插件初始化創建,插件到框架的組合等,插件框架能夠靈活的管理各個插件實例以及插件之間的通信機制,也支持插件的卸載。
?
三、插件式架構組件(MEF)
在MEF之前,人們已經提出了許多依賴注入框架來解決應用的擴展性問題,比如OSGI 實現以Spring 等等。在 Microsoft 的平臺上,.NET Framework 自身內部包含組件模型和 System.Addin。同時存在若干種開源解決方案,包括 SharpDevelop 的 SODA 體系結構和“控制反轉”容器(如 Castle Windsor、Structure Map、Spring.Net 以及Unity)。
雖然.NET平臺下,包括MS在內的各種方案已經遍地開花,但是MEF是第一個隨著CLR發布的解決方案。
?
本系列文章所討論的插件式框架的設計采用.NET 4.0中的MEF框架作為核心組件,MEF的詳細可查看我寫的《MEF程序設計指南》系列博文。
?
推薦資料:
《MEF程序設計指南》:http://www.cnblogs.com/beniao/archive/2010/08/11/1797537.html
《Silverlight動畫開發教程》:http://www.cnblogs.com/beniao/archive/2010/04/04/1703992.html
《一步一步學Silverlight教程》:http://www.cnblogs.com/Terrylee/archive/2008/03/09/Silverlight2-step-by-step-Tutorials.html
《Silverlight MSDN?Webcast》:http://www.msdnwebcast.net/webcast/2098.aspx
插件式架構設計實踐二:基于Silverlight的B/S插件式架構設計方法
架構設計并不是項簡單的工作,架構設計最終的產物則是由不同的框架組件構成一套高擴展、穩定、安全、通用的開發框架平臺。或許一提到架構設計,很多朋友都聯想到了常用的框架組件:數據訪問組件、日志組件、事務組件、消息組件、配置組件以及工具庫等。然而,本系列文章的中心“插件式框架設計”已經偏離了常規的框架設計方法論,它只是一套用于改善系統功能模塊組織結構,靈活開發、部署、維護的一套方法論,其中的每個功能模塊的具體實現還是走常規的開發框架,它自身的職責則主要是負責根據配置文件實現系統功能模塊的組裝,靈活的卸載某個部件以及各部件之間如何通信等。
本篇將和大家分享基于Silverlight的B/S插件式架構設計的方法,文中的內容僅僅只是我個人知識、經驗的總結,如有不妥之處還望各位讀者給予指正,大家共同學習,進步。
?
對于Silverlight項目而言,前端系統需要后臺服務接口的支撐才能完成數據通信訪問、儲存數據的的功能。通常需要給Silverlight前端提供相應的數據通信接口,可分為多種方式提供,常用的數據通信接口分別有Socket、HttpHandler、WebService以及WCF等方式。詳細的架構模型如下圖所示:
?
系統后臺采取的技術架構為是豎向分成架構模式+橫向擴展架構模式相結合,分成架構模式也就是眾所周知的三層/多層架構,這里不做詳細介紹;橫向擴展架構模式則為支持橫向業務擴展的架構模式,所有業務組件(我通常稱其為:業務插件)通過實現統一的業務服務接口來擴展系統業務功能,系統框架中的業務組件容器(我通常稱其為:業務插件容器)使用統一的業務服務接口靈活的管理業務組件,實現各組件之間的數據通信、事件通知、以及靈活的構造、銷毀業務組件實例。總上述,這種架構模式我便稱其為插件式架構設計。
?
插件式架構設計的框架能夠靈活的橫向擴展業務組件的擴展開發,管理業務組件的生命周期等,然而對于RIA應用系統來說,他只需要依賴一個或多個通信接口實現數據通信,不用關心服務后臺的架構以及具體是實現細節。需要注重點則是關于系統前端的框架架構設計,一套基于Silverlight技術的插件式架構設計方法,通過插件框架靈活的加載、組合、初始化并進行托管運行系統插件模塊,是我們期望達到的目的。如上所述,插件式框架的架構圖大致如下所示:
?
系統前端的核心架構受到所采用的技術方案的影響,會演化出不同的架構設計方法和架構風格,?如前面所說我們采用的是RIA的技術Silverlight來進行技術構建,那么在進行系統架構設計中定會受到Silverlight技術自身的一些限制,以至于我們的設計不能按照常規的方法,方式去實現。
?
Silverlight能夠為用戶提供高用戶體驗的軟件界面,以及傳統的Web應用實現不了的很多功能,且也有很多的局限性,系統功能模塊過多導致發布出來的應用程序包(.xap)過大,導致系統運行中初始化緩慢等諸多問題。我們需要一種全新的、開放性的、高擴展性的架構體系,來緩解這種因為技術自身的缺陷造成的諸多問題,可以實現快速的啟動應用程序初始化界面,根據配置動態組裝系統功能模塊,以及靈活的擴展新的系統功能模塊等功能,我將這種架構體系命名為插件式架構體系(或許與別人口中的插件式架構有所區別)。
?
如上圖所示,描述了插件框架的框架結構,框架由插件容器、插件契約和插件組件(業務功能插件)三大部分組成,擴展開發新的插件組件需要實現插件契約接口,以便插件容器可以靈活的控制插件組件。關于這三大組成部分的作用請查看《插件式架構設計簡介》,本篇對基于Silverlight插件式架構設計方法進行了介紹,下一篇將詳細介紹插件式架構設計的解決方案。
?
推薦資料:
《MEF程序設計指南》:http://www.cnblogs.com/beniao/archive/2010/08/11/1797537.html
《Silverlight動畫開發教程》:http://www.cnblogs.com/beniao/archive/2010/04/04/1703992.html
《一步一步學Silverlight教程》:http://www.cnblogs.com/Terrylee/archive/2008/03/09/Silverlight2-step-by-step-Tutorials.html
《Silverlight MSDN?Webcast》:http://www.msdnwebcast.net/webcast/2098.aspx