http://www.cnblogs.com/baihmpgy/archive/2011/05/22/2053742.htmlhtml
先引出幾個問題。首先,對於分層,如何來分層?僅僅縱向分層是否夠用了?什麼是「二維分層」呢?一提到模塊化,不少人會說「咱們的系統就是基於模塊化來構建」,稍微一多問,要麼和分層差很少,要麼就說咱們是基於一個又一個的dll文件來實現模塊化的,那應該怎樣纔算模塊化呢?「開放平臺」怎麼回事?架構
關於「二維分層」軟件體系結構的提法比較少見。不過,對於分層軟件體系結構,估計是個傻子都知道。「模塊化」也是傻子都知道的一個詞,軟件工程最經典之一的詞莫過於「高內聚、低耦合」。模塊化
在我我的看來,軟件體系結構不是套路,而是根據實際應用系統的需求來確認的,甚至有時候須要根據實際狀況來組合使用經典的「三層」、「管道」等軟件體系結構風格。但無論怎樣,從最最抽象的角度來看待一個軟件系統時,軟件系統就能夠抽象成以下的結構,即應用系統老是由一個又一個功能構成的,而每個功能老是由一段又一段的代碼來構成的。post
在這裏每個功能的代碼段並不徹底一致,當咱們應用傳統的分層軟件體系結構來設計應用系統時,咱們老是須要預想整個應用系統大體的代碼,而後爲大體的代碼作一個歸類,從而制定每個層次大體的功能及其規範,每一層次通常也就包含了相應功能的代碼段,理想狀態下,這樣的體系結構可能以下。編碼
聰明的你確定看出來,爲了使用統一的分層架構來設計全部功能,那麼在一個層次都必須包含了不一樣模塊類似邏輯代碼,那就有可能出現一種狀況,就是一個層次在不一樣模塊的編碼實現複雜度也不必定相同,好比在上圖的層N設計中,功能2的代碼段N要比其它兩個模塊的代碼段簡單的多得多,若是這種異常狀況在一個應用系統出現屢次的話(特別是在大規模應用系統,這將是很常見的事情,就像原來我在Sybase工做時,數據管理、數據監控、數據複製等功能的複雜度都不同),爲應用系通通一設計的分層在異常狀況下就顯得特別的彆扭。所以,我以爲在這種狀況下,僅關注代碼縱向行爲而設計的分層軟件體系結構是不夠的。除了考慮縱向代碼行爲,咱們還須要關注軟件系統的總體功能。從「二維」的角度分解軟件,「二維」的核心就是:從橫向維度考慮軟件系統的功能組成,從縱向維度來考慮每個功能的代碼行爲,將若干個功能組合在一塊兒做爲縱向分層的單元,即「將若干功能橫向切割成不一樣的模塊,對每個模塊進行統一的分層架構」。雲計算
關注「二維」的分層軟件體系結構會使架構的設計更加適合實際應用系統,不過,須要注意的是,橫向維度關注的是應用系統的功能,所以,橫向切割必須以功能爲單元來組織,這也就意味着,模塊是由若干個功能構成的。這樣,構建的模塊間的依賴也比較小。這話的意思,就是要強調,模塊不是以縱向層次來劃分的,由於縱向層次具備很強的代碼依賴關係,通常而言,上層是徹底依賴於下層的。插件
關於分層的話題,本文就描述到這裏,歡迎你們能圍繞這個問題繼續展開。接下來,咱們再來談一下模塊化。設計
在我給客戶推薦OSGi模塊化的優勢時,不少客戶會說「咱們的應用系統就是基於模塊化來構建的」,好,那咱們來交流一下模塊化。一旦深刻討論以後,就會發現很多客戶的模塊化就是所謂的分層,或者所謂的程序集就是模塊化。而一旦再深刻討論模塊的可複用性、隔離性、可維護性和隔離性時,客戶會簡單的說,咱們拷貝代碼或者拷貝dll過來就複用了。若是再深刻問下去的話,會發現並不只僅拷貝就解決了複用的問題,在拷貝的同時須要大量的修改。呵呵,這很是的有意思,:)。關於模塊化,我很是推薦OSGi規範(咱們也實現了OSGi.NET規範)提倡的模塊化。在這裏的模塊,是一個徹底物理隔離,能夠動態部署、動態更新、動態卸載、動態啓動與中止,全部的模塊均可以躺在模塊倉庫中,以備咱們真正使用「搭積木」的方式構建系統。從OSGi的角度來看,咱們能夠爲應用系統設計一個大體通用的企業級整體架構,以下所示。這個架構實際上,還能夠設計的更加開放一些,能夠適合於傳統軟件和目前流行的雲計算軟件以及開放平臺軟件的構建。htm
在這個系統架構圖中,一個應用系統由客戶端、服務端、模塊倉庫三部分構成。客戶端和服務端基於模塊化構建,相應的模塊稱爲功能模塊和服務模塊,這裏面的模塊均從模塊化倉庫獲取,能夠實現自動更新、遠程動態管理與部署、模塊多版本並存。每個功能模塊按照要實現的功能複雜度進行個性化的模塊體系結構設計。這是一種理想化的狀態,正如《將來10年:OSGi、Spring DM》做者羅時飛描述的OSGi提倡理念同樣。事實上,個人老僱主Sybase也是基於這樣的思路來構建Sybase Central和Sybase Control Centre產品的。blog
目前我團隊也在致力於在.NET平臺上實現這麼一個理想化的模塊化平臺,並基於這個模塊化平臺實現一個「大和」的統一開放平臺,目前已經取得了不錯的進展,該平臺的體系結構以下所示。
咱們但願經過這個平臺來集中普遍的開發者們的聰明才智,構建一個龐大的插件倉庫,讓不一樣的開發者、不一樣的最終軟件客戶均可以從這個統一開放平臺受益。這樣構建的軟件系統纔是我心目中最理想的真正的「模塊化」!
固然,不少事情都是提及來容易,作起來困難,不過,這並不表明不可能,至少咱們已經經過一點一滴實踐了這樣的模式。文中的描述也可能瘋狂或者有誤差,歡迎任何指正。