科技改變生活 · 科技引領未來
“低耦合(Low Coupling)”這個詞相信大家已經耳熟能詳,我們在看spring的書籍、MVC的數據、設計模式的書籍,無處不提到“低耦合、高內聚”,它已經成為軟件設計質量的標準之一。那什么是低耦合?耦合是對一個元素與其他元素之間的聯系、感知和依賴性的度量。這里提到的元素可以是函數、對象(類)或系統、子系統或模塊。如果一個元素與元素B,或認為B通過自己的方法,或不能正常工作時B不存在,那么元素加上元素B耦合引起的問題是,當元素B的變化或不存在,它將影響元件的正常工作,影響系統的可維護性和可變性。同時,A元素只能在B元素存在的環境中工作,這也降低了A元素的可重用性。由于耦合的缺點,我們在軟件設計中努力追求“低耦合”。低耦合要求在我們的軟件系統中,一個元素不應該過度地依賴于其他元素,請注意這里的“過度”一詞。比如我們可以設計一個不與JDK耦合的類,這可能嗎?除非你不是一個設計的Java程序。
1、耦合度分類(由高到低)
1)內容耦合。當一個模塊直接修改或操作另一個模塊的數據,或直接向另一個模塊傳輸數據時,就會發生內容耦合。此時,修改后的模塊完全依賴于修改后的模塊。類與類之間的直接調用或繼承關系就屬于這種耦合。應該完全避免內容耦合。關鍵是不要在類內部直接操作另一個類的對象的數據成員。可以通過在操作類中增加一個函數接口向客戶類提供服務來實現。
2)公共耦合是指兩個或多個模塊一起引用一個全局數據項。
3)控制耦合是指一個模塊在接口上發送信號(如開關值、標志量等)來控制另一個模塊,并根據信號值來調整接收信號的模塊的動作。
4)標記耦合是指復雜的內部數據結構是通過參數在模塊之間傳遞的。數據結構的改變會改變相關的模塊。
5)數據耦合是指基本類型的數據通過參數在模塊之間傳遞。
6)非直接耦合就是模塊間沒有信息傳遞。
2、為什么要追求低耦合?
原因很簡單。當耦合度很高時,在代碼維護過程中修改一個地方會涉及到很多地方。如果耦合關系不是澄清修改期間,后果可能是災難性的,特別是對于有許多變化的項目需求和多人協作開發和維護,修改一個地方會導致模塊的錯誤一直運行穩定,如果是嚴重的,將導致一個惡性循環,問題永遠不能完全解決,開發和測試正與各種各樣的問題作斗爭。最終會導致項目延遲,降低用戶滿意度,增加成本。
張熙