插件架構體系是我一直就非常關注的內容,其實插件架構體系的發展已經有很久的背景了,插件架構體系的優點我們也是能看的非常明顯,象硬件一樣的即插即用、無論對于公司還是業界而言的良好的積累方式、為公司或業界提供統一而規范的開發方式以及穩定的內核架構等等,這些優點無論對于公司還是業界來說都是非常重要的。
插件架構體系基本的一個概念就是基于松散的模塊積累方式,通過新增插件以及擴展原有插件的方法來完成系統的實現,凡事有利必有弊,在看到插件架構體系的這些優點的同時,在實現和使用插件架構體系的時候仍然會碰到不少的問題,我大概的整理了一下,主要有:
1、插件的定義
插件的定義可謂是插件架構體系在使用時會碰到的最大的問題,首先要解決的問題就是何謂插件、插件如何去定義?何謂插件這個大家的看法都會有所不同,由于對于何謂插件的看法不同,必然就導致了在整個系統的設計時采用了不同的設計方式,主要是在插件的粒度控制上會有不同的設計方式。
個人覺得也許采用模塊作為插件是一種可行的方案,采用模塊作為插件的核心思想是按一種從頂至下的設計理念,也就是架構設計中產生的模塊視圖首先作為系統的插件構成視圖,根據對模塊的詳細設計此時又可對模塊的插件進行細一步的劃分,或者是將插件劃的更細,或者是采用插件的擴展機制去實現。
插件的定義則是帶來了一些設計上的難度的,我仍然覺得需要將插件視為黑盒去看,插件需要提供什么樣的功能、插件需要什么樣的運行環境、插件需要暴露哪些包等等,這個在Osgi中都有相應的映射,在基于插件架構體系進行系統構建的時候插件的粒度、定義我覺得這是最難把握的,甚至覺得難度上會超過以前的模塊設計,需要的是更為規范的模塊式的設計,覺得這個在中小型軟件企業中往往是很難做到的,主要仍然是架構設計時的控制,在設計時重要的因素在于保持系統的松散結構,至于概要設計時則完全可按照架構設計的約束去進行,詳細設計則完全和平時的做法一樣。
2、插件的依賴
插件的依賴主要有兩種,一是對于系統已有插件的依賴,另一方面則是對于外部jar包的依賴。這都是在設計時需要做出考慮的,對于插件架構體系而言對已有插件的依賴和對外部jar包的依賴這個差別就比較大了,其實這個在設計上還好辦,因為可以通過重構,本來一直依賴覺得最困難的是對其他插件的依賴怎么辦,難道要去引用其他plugin的lib,在eclipse ide中是解決了這個問題的,所以現在來說插件的依賴在插件體系架構中就顯得沒那么困難了,這說明插件的依賴的解決依賴于一個良好的插件開發IDE。
3、插件的測試
插件的測試我這指的不是運行的功能測試,而是單元測試,感覺這個在現在的插件架構體系里還是比較困難的,因為在一種松耦合的架構體系中,對于其他插件的依賴是要在容器運行期才能夠獲取的,覺得這個有點變成了當時ejb container的問題,現在好像得通過mock以及其他的方法去解決,另外一個也許是IoC的策略?這方面需要進一步思考,
4、插件的調試
插件的調試主要是依賴容器的調試,現在的eclipse ide已經支持插件的調試,并且好像是支持插件的遠程調試的。
5、插件開發學習的門檻
就目前來說插件開發學習的門檻并不算低的,個人覺得至少要對插件體系架構有一定的了解(例如基于Osgi的插件框架,那就要求對OSGI有一定的熟悉),但相對這個門檻而言,其獲得的價值是值得的。
其實講了這么些問題,集中的主要在于基于插件架構體系的應用框架以及業務系統的設計方式將和以前的會有些變化,這個也是可以理解的,畢竟是受技術架構約束的,另外一方面則主要集中在插件開發的簡易性和質量的保證,這個就得依靠一個強大的插件開發IDE。