軟件體系結構:二維分層、模塊化和開放平臺

先引出幾個問題。首先,對於分層,如何來分層?僅僅縱向分層是否夠用了?什麼是“二維分層”呢?一提到模塊化,很多人會說“我們的系統就是基於模塊化來構建”,稍微一多問,要麼和分層差不多,要麼就說我們是基於一個又一個的dll文件來實現模塊化的,那應該怎樣纔算模塊化呢?“開放平臺”怎麼回事?

關於“二維分層”軟件體系結構的提法比較少見。不過,對於分層軟件體系結構,估計是個傻子都知道。“模塊化”也是傻子都知道的一個詞,軟件工程最經典之一的詞莫過於“高內聚、低耦合”。

在我個人看來,軟件體系結構不是套路,而是根據實際應用系統的需求來確認的,甚至有時候需要根據實際情況來組合使用經典的“三層”、“管道”等軟件體系結構風格。但不管怎樣,從最最抽象的角度來看待一個軟件系統時,軟件系統就可以抽象成如下的結構,即應用系統總是由一個又一個功能構成的,而每一個功能總是由一段又一段的代碼來構成的。

這裏寫圖片描述

在這裏每一個功能的代碼段並不完全一致,當我們應用傳統的分層軟件體系結構來設計應用系統時,我們總是需要預想整個應用系統大致的代碼,然後爲大致的代碼做一個歸類,從而制定每一個層次大致的功能及其規範,每一層次一般也就包含了相應功能的代碼段,理想狀態下,這樣的體系結構可能如下。

這裏寫圖片描述

聰明的你肯定看出來,爲了使用統一的分層架構來設計所有功能,那麼在一個層次都必須包含了不同模塊相似邏輯代碼,那就有可能出現一種情況,就是一個層次在不同模塊的編碼實現複雜度也不一定相同,比如在上圖的層N設計中,功能2的代碼段N要比其它兩個模塊的代碼段簡單的多得多,如果這種異常情況在一個應用系統出現多次的話(特別是在大規模應用系統,這將是很常見的事情,就像原來我在Sybase工作時,數據管理、數據監控、數據複製等功能的複雜度都不一樣),爲應用系統統一設計的分層在異常情況下就顯得特別的彆扭。因此,我覺得在這種情況下,僅關注代碼縱向行爲而設計的分層軟件體系結構是不夠的。除了考慮縱向代碼行爲,我們還需要關注軟件系統的整體功能。從“二維”的角度分解軟件,“二維”的核心就是:從橫向維度考慮軟件系統的功能組成,從縱向維度來考慮每一個功能的代碼行爲,將若干個功能組合在一起作爲縱向分層的單元,即“將若干功能橫向切割成不同的模塊,對每一個模塊進行統一的分層架構”。

這裏寫圖片描述

關注“二維”的分層軟件體系結構會使架構的設計更加適合實際應用系統,不過,需要注意的是,橫向維度關注的是應用系統的功能,因此,橫向切割必須以功能爲單元來組織,這也就意味着,模塊是由若干個功能構成的。這樣,構建的模塊間的依賴也比較小。這話的意思,就是要強調,模塊不是以縱向層次來劃分的,因爲縱向層次具有很強的代碼依賴關係,一般而言,上層是完全依賴於下層的。

關於分層的話題,本文就描述到這裏,歡迎大家能圍繞這個問題繼續展開。接下來,我們再來談一下模塊化。

在我給客戶推薦OSGi模塊化的優點時,很多客戶會說“我們的應用系統就是基於模塊化來構建的”,好,那我們來交流一下模塊化。一旦深入討論之後,就會發現不少客戶的模塊化就是所謂的分層,或者所謂的程序集就是模塊化。而一旦再深入討論模塊的可複用性、隔離性、可維護性和隔離性時,客戶會簡單的說,我們拷貝代碼或者拷貝dll過來就複用了。如果再深入問下去的話,會發現並不僅僅拷貝就解決了複用的問題,在拷貝的同時需要大量的修改。呵呵,這非常的有意思,:)。關於模塊化,我非常推薦OSGi規範(我們也實現了OSGi.NET規範)提倡的模塊化。在這裏的模塊,是一個完全物理隔離,可以動態部署、動態更新、動態卸載、動態啓動與停止,所有的模塊都可以躺在模塊倉庫中,以備我們真正使用“搭積木”的方式構建系統。從OSGi的角度來看,我們可以爲應用系統設計一個大致通用的企業級總體架構,如下所示。這個架構實際上,還可以設計的更加開放一些,可以適合於傳統軟件和目前流行的雲計算軟件以及開放平臺軟件的構建。

這裏寫圖片描述

在這個系統架構圖中,一個應用系統由客戶端、服務端、模塊倉庫三部分構成。客戶端和服務端基於模塊化構建,相應的模塊稱爲功能模塊和服務模塊,這裏面的模塊均從模塊化倉庫獲取,可以實現自動更新、遠程動態管理與部署、模塊多版本並存。每一個功能模塊按照要實現的功能複雜度進行個性化的模塊體系結構設計。這是一種理想化的狀態,正如《未來10年:OSGi、Spring DM》作者羅時飛描述的OSGi提倡理念一樣。事實上,我的老僱主Sybase也是基於這樣的思路來構建Sybase Central和Sybase Control Centre產品的。

目前我團隊也在致力於在.NET平臺上實現這麼一個理想化的模塊化平臺,並基於這個模塊化平臺實現一個“大和”的統一開放平臺,目前已經取得了不錯的進展,該平臺的體系結構如下所示。

這裏寫圖片描述

本文轉載自:http://www.cnblogs.com/baihmpgy/archive/2011/05/22/2053742.html
更多的是作爲學習書籤和給更多的人學習閱讀,就像原作者的網名一樣——道法自然,傳播道法。本博主也在致力於java結構的統一開放平臺構建中,如有志同道合之人,可以郵件多多交流:[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章