軟體設計原則的應用

2021-09-26 00:24:18 字數 2296 閱讀 9468

dubbo(是alibaba開源的乙個分布式服務框架,在網際網路行業應用和擴充套件十分廣泛。dubbo的核心功能為我們進行分布式系統設計提供了兩大方案,即高效能和透明化的rpc實現方案和服務治理方案。

(1)元件設計原則背後的量化標準

在元件設計原則中我們提到乙個穩定抽象原則,即元件的抽象程度應該與其穩定程度保持一致。元件的穩定度可以用以下公式來衡量:

i = ce / (ca + ce)

其中ca代表afferent coupling,即向心耦合,表示依賴該元件的外部元件數量,而ce代表efferent coupling,即離心耦合,表示被該元件依賴的外部元件的數量。i代表instability,即不穩定性,它的值處於[0,1]之間。如果乙個元件的ce=0那麼不穩定性i=0,說明它非常穩定。相反,如果乙個元件的ce=3,ca=0,那麼它的不穩定性i=1,說明它非常不穩定。下圖展示的是一種更常見的場景,沿著依賴的方向,元件的不穩定性應該逐漸降低,穩定性應該逐漸公升高。如果已經處於穩定狀態的元件就不應該去依賴處於不穩定狀態的元件。

另一方面,元件的抽象度也同樣存在類似的計算公式:

a = na / nc

其中a代表abstractness,即抽象度。na表示元件中抽象類的數量,而nc表示元件中所有類的總和,這樣通過對比na和nc就能簡單得出該元件的抽象度。

正如上圖所示,乙個系統中多數的元件位於依賴鏈的中間,也就是說它們即具備一定的穩定性也表現出一定的抽象度。而在下圖中,如果乙個元件的穩定度和抽象度都是1,意味著該元件裡面全是抽象類且沒有任何元件依賴它,那麼這個元件就沒有任何用處。相反,如果乙個元件穩定度和抽象度都是0,那麼意味著這個元件不斷在變化,不具備維護性,這也是我們不想設計的元件。所以,在穩定度和抽象度之間我們應該保持一種平衡,在下圖中間的那個線就是平衡線。

我們用距離的概念來量化這種平衡,距離(distance)的計算公式:

d = abs(1 - i - a) * sin(45)

距離的圖形化表示參考下圖。

(2)dubbo中的分包原則

dubbo在設計過程中同樣採用的是穩定抽象和穩定依賴等原則,下圖展示的就是dubbo中各個包之間的依賴關係,除了dubbo.common通用工具包之外,處於依賴關係底層的dubbo.remoting包和dubbo.rpc包是整個框架中的高層抽象。

通過jdepend等工具對dubbo中的這些包依賴關係進行分析,我們可以得出下圖中所示的距離效果。我們可以看到dubbo中的多數包結構在穩定性和抽象性之間達到了一種平衡。

基於以上結果,我們再對dubbo的**結構做進一步分析,dubbo的**結構對應於下圖中的元件分層。其中,protocol層和proxy層放在rpc模組中,構成rpc核心,不考慮集群環境,可以只使用這兩層完成rpc呼叫;remoting模組實現dubbo協議,transport層和exchange層都放在remoting模組中,如果不使用dubbo協議,則該層不會使用;serialize層放在common模組中以便更大程度復用;registry和monitor實際上不算一層。

dubbo的元件體現了功能演進思想,首先protocol是核心層,構成rpc基礎元件,如果不需要達到透明化呼叫效果,使用protocol層就可以實現低層次的遠端方法呼叫;在protocol基礎之上,新增proxy封裝透明化動態**,呼叫遠端方法就如同呼叫本地方法;透明化呼叫實現之後,就需要考慮負載均衡和集群容錯機制,cluster層承載了這方面的功能;registry和monitor提供服務路由和治理相關輔助功能。而在現有各種序列化工具的基礎上為了提公升網路傳輸效能和擴充套件功能,remoting層實現了自定義dubbo協議作為整個框架的一大擴充套件點。

我出版了《系統架構設計:程式設計師向架構師轉型之路》、《向技術管理者轉型:軟體開發人員跨越行業、技術、管理的轉型思維與實踐》、《微服務設計原理與架構》、《微服務架構實戰》等書籍,並翻譯有《深入rabbitmq》和《spring5響應式程式設計實戰》,歡迎交流。

軟體設計原則

開閉原則 ocp 軟體設計的最大原則 這個原則說的是 對擴充套件開放,對修改關閉。其實意思是說,給系統新增新的功能,但不修改原有 如果能做到呢,關鍵在於抽象化,也就是封裝變化,抽象層不變,讓具體實現依賴抽象隨需求變化。使得系統具有很強的擴充套件性和可維護性。黎克特制代換原則 任何基類可以出現的地方,...

軟體設計原則

高內聚 低耦合 乙個軟體系統要有乙個穩定的架構,不會隨需求的改變而發生巨大的變動。因此,高內聚 低耦合是乙個軟體系統設計中必須遵循的基本原則 面向抽象程式設計 在面向過程的軟體開發中,上層元件呼叫下層元件,就意味著上層元件依賴於下層元件,當下層元件發生劇烈變化時,上層元件也要跟著一起發生變動,這將導...

軟體設計原則

軟體開發中有以下一些基本原則,深刻掌握這些原則比掌握一門技術要重要。1.開閉原則 open closed principle,ocp 乙個軟體應當對擴充套件開放,對修改關閉。也就是說我們在設計軟體時,應當可以在不必修改源 的情況下改變 擴充套件 其行為。開閉原則是非常重要的設計原則,其它的設計原則實...