|
本系列博文將使用微軟RIA技術解決方案Silverlight以及擴展性管理框架Managed Extensibility Framework(MEF),以插件式架構設計為導線,分享本人在從事基于微軟Silverlight技術構建的RIA系統中實施插件式系統架構設計的相關技術和經驗。鑒于本人能力有限,如有不妥之處請各位朋友指正,大家共同學習、進步,謝謝!
軟件的工業化使得軟件復用已經從通用類庫進化到了面向領域的應用框架。應用框架強調的是軟件的設計重用性和系統的課擴展性,以縮短大型應用軟件系統的開發周期,提高開發質量。應用軟件開發的未來就在于提供一個開放的體系結構,以方便中間件的選擇、組裝和集成,應用框架的重用已成為軟件開發生產中最有效的重用方式之一。面對這種發展趨勢,呼之欲出的便是一種全新的、開放性的、高擴展性的架構體系,這里我將其命名為插件式架構(或許與別人口中的插件式架構有所區別)。
一、插件式架構設計概述
插件式架構設計近年來非常流行,其中Eclipse起了推波助瀾的作用,提到插件式就會不由自主的想到餓Eclipse。其實插件式設計并不是什么新事物,早在幾十年前就有了。像X-Server就是基于插件式設計的,除了核心功能外,它所有的擴展功能和設備驅動都是以插件方式加入進來的。
基于插件的設計好處很多,把擴展功能從框架中剝離出來,降低了框架的復雜度,讓框架更容易實現。擴展功能與框架以一種很松的方式耦合,兩者在保持接口不變的情況下,可以獨立變化和發布。公開插件接口,讓第三方有機會擴展應用程序的功能,有財大家一起發。另外,還可以讓開源與閉源共存于一套軟件,你的插件是開源還是閉源,完全由你自己決定?;诓寮O計并不神秘,相反它比起一團泥的設計更簡單,更容易理解。各種基于插件設計的架構都有自己的特色,但從總體架構上看,其模型都大同小異。
插件式架構設計中主要包括:插件框架、插件契約(服務)以及插件組件三部分組成。
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、豐富的動畫效果以提供完美的用戶體驗。
8、跨平臺、跨瀏覽器支持。
9、更多......
三、插件式架構設計的優點
可以說任何形式的架構設計實踐工作無非就是從負責、繁瑣的的研發過程中尋找一種相對方便、靈活、穩定、高擴展性的以及更加簡單的一種新型技術實現方式,從而提高項目的整體開發進度和質量,減少開發人員的工作壓力,間接的提高整個項目團隊的工作效率。
采用插件式架構設計的優點主要體現在以下幾個方面:
1)、降低系統各模塊之間的互依賴性
在進行插件式開發中,任何一個系統功能模塊、通用用戶界面以及最小的圖標等都可以插件的方式進行開發,從而提高了通用功能模塊的重用性;各個功能進行獨立開發,相互之間不存在互依賴性,使各個獨立的功能都可以單獨運行,也可以通過插件框架進行托管運行,從而提高了整個系統的靈活性;對于修改功能模塊也不會影響到其他插件模塊的正常運行,降低了系統的維護難度,提高了系統的可擴展性?!?/p>
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發布的解決方案。
it知識庫:插件式架構設計實踐一:插件式系統架構設計簡介,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。