如何繪制邏輯圖——要素的屬性:內聚與解耦(6)

2 評論 10049 瀏覽 45 收藏 12 分鐘

編輯導語:邏輯圖在我們的工作中經常會用到,一個優秀的邏輯圖可以提高我們的工作效率;筆者在上一篇文中介紹了描述要素歸集名稱的屬性(系統與模塊),本文作者說明了描述要素歸屬的原則屬性,我們一起來看一下。

松耦合和高內聚,是決定最終完成系統是否具有應變性、復用性的重要設計原則,作為在分析和設計一線的需求工程師也必須要理解和掌握;因為在需求分析和業務設計中沒有做到,那么到了后面的開發階段再考慮就晚了。

后期僅用技術手段讓系統獲得同等的應變/復用能力,可能要付出很大的成本、同時系統可能也因此變得更加復雜;所以,松耦合與高內聚的設計,是從需求工程師的工作開始的。

屬性4:解耦與內聚,是描述要素歸集原則的重要概念。

分層與粒度說明了要素的大??;系統與模塊說明了要素的歸集單位。下面討論形成系統的原則是什么。

打個比方說:將不該放到一起的要素放到了同一個盒子內,就會造成每個盒子內的要素總會受到另一個盒子內的要素牽扯,造成無法將盒子蓋上蓋子形成黑盒(的狀態);在黑盒與白盒一篇中講到了,如果研究對象處于這樣的狀態就無法對同一層的要素進行黑盒狀態的分析和研究。

那么什么樣的要素可以放在一起,什么樣的要素不能放在一起呢?解決這個問題需要引入解耦和內聚的概念。

一、解耦的概念

耦合:是指兩個或兩個以上的系統(要素的集合體)的輸入與輸出之間存在緊密配合與相互影響,某一方的變動會影響到另一方的變化。

解耦:指的就是解開耦合的狀態,去掉兩者之間造成耦合的連接關系。

耦合有兩種狀態:緊耦合、松耦合,舉例說明兩者的概念和關系。

假定某個對象的內部是由4個子系統構成的,分別為系統1、系統2、系統3、系統4。如圖1所示。

如何繪制邏輯圖 — 6.要素的屬性:內聚與解耦

圖1 緊耦合與松耦合的示意

1. 緊耦合

從系統1、系統2、系統3這三者之間的關系可以看出,不同系統內部的要素之間發生了密切關聯,三個系統之間兩兩成對地形成了非常復雜的依賴關系,三個系統因“蓋不上蓋子”都不能形成黑盒,這種狀態就是“緊耦合”狀態。

2. 松耦合

系統4與其它系統之間的關系是非常清晰、簡單的,分別只有一個接口,可以看出系統4 內部的要素并不直接與其他系統中的要素直接關聯,而是由統一的接口進行關聯;也就是說,系統4和其它和系統之間雖然有關聯,但不是復雜的依賴關系,這種由唯一或是標準關聯形成的關系就是松耦合。

解耦,簡單地說,就是將上述的“緊耦合”狀態解開,形成“松耦合”的狀態。

解耦概念說明,當分析對象內部的系統之間都是緊耦合關系時,那么各個系統就不能在“黑盒狀態”下進行分析設計了;因為,各個系統都存在著系統內要素之間的依賴關系,也不可能在不考慮這些依賴關系的前提下,將各個系統看成是黑盒了。

解耦概念對后續分析與設計有著非常實際的指導意義,比如:某個產品的生產過程在企業內部大都是由多部門協同完成的,業務流程大多要跨部門才能完成;最佳的流程設計是部門之間的交互最少,最大限度地減少不同部門內部工種之間發生的直接依賴,避免由于某個部門內部某個工種的作業內容發生了變化而引起其它部門的連鎖反應。

二、內聚的概念

內聚:是說明同一個系統中各個要素之間的關聯性。

理想的內聚狀態,如圖2所示,對象中的每個系統都可以獨立地完成一個業務領域的工作,且各個系統內部的要素之間關系緊密;也就是說,每個系統內所有的要素都是為了完成同一個目標而存在的;比如:對于財務系統來說,既不要把財務系統的功能劃分到其他系統中,也不將其它系統中的非財務功能拉入到財務系統中來。

內聚的概念說明,各個系統內部的要素要按照“內聚”的標準放在一起,各個系統之間通過一定的接口進行相互調用,而各系統內的要素之間沒有直接關聯;這樣在進行討論時一個系統就可以用一個黑盒來表示。

如何繪制邏輯圖 — 6.要素的屬性:內聚與解耦

圖2 內聚概念的示意

內聚的實際意義在于,在設計時讓每個系統具有的功能都相對獨立、單一,這樣就容易進行拆分、并通過不同的組合靈活地滿足各種需求。

三、高內聚與松耦合

系統內要素間的內聚程度高就稱之為“高內聚”,系統間的關聯程度低就稱之為“松耦合(或低耦合)”,參見圖3的對比可以看出來,內聚和耦合之間的關系。

如何繪制邏輯圖 — 6.要素的屬性:內聚與解耦

圖3 高內聚與松耦合的示意

1. 高內聚

高內聚的系統內的功能要素要做到高度的相似聚合,共同為一個目標服務。圖3(a)中系統1、2、3就沒有做到高內聚,而是緊耦合,系統內部之間的交互非常繁雜;而圖3(b)的情況就完全不同了,各個系統的內部都做到了高內聚。

2. 松耦合

在同一對象內的各個系統之間要盡量做到松耦合,系統之間具有最小的相關度,圖3(a)中系統之間沒有做到,對圖3(b)內系統之間實現了松耦合,因此圖3(b)構造看上去就非常的干凈、舒服。

判斷信息系統架構優劣的重要原則之一就是:系統之間是否進行了松耦合的設計,它關系到系統運行后的維護成本,而且還極大地影響到系統的擴展性、對需求變化的響應能力、甚至是系統的生命周期。

四、內聚與解耦的作用

內聚和解耦的作用,不但對于從事編碼開發的工程師重要,對于從事需求分析和軟件設計的工程師來說更為重要也不為過。

因為完成一個好的系統是從分析和設計開始,如果前期的分析和設計將業務都耦合在一起了,那么后續從技術架構和開發層面再怎么努力,可能也挽回不了系統整體的緊耦合狀態;或是需要花費巨大的成本(時間、資源)才能收到很小的效果。

圖4給出了一個企業架構的框架示意圖,這個圖是由不同的子系統、模塊構成的,在繪制過程中注意了高內聚、松耦合的設計原則,每個子系統、或是模塊都可以隨著需求的變化而被替換。

如何繪制邏輯圖 — 6.要素的屬性:內聚與解耦

圖4 企業架構的框架圖(不同系統的組合關系)

擴展說明:

“功能做到模塊化、快速響應客戶的需求變化”是軟件行業一直追求的目標,不能快速地響應時代的變化的系統,隨著時間的推移就失去了存在的價值。

但是很多軟件工程師并不清楚達成這個目標與業務人員的相關性,不清楚業務人員對系統的模塊化設計和結果起著非常重要的作用;因為這些目標的達成都需要一個非常重要前提,那就是對“業務的拆分”,首先要將研究對象拆分成為若干個小的可以獨立的要素,才可能實現“將一個大的系統分解成多個小的、獨立的功能/組件,然后通過它們的不同組合來處理復雜的、大型的、多變的問題”。

也就是說,業務人員能否將研究對象進行有效的拆分、并給出變化的規律性是關鍵;如果業務人員做不到,那么在后續的技術設計和開發時就很難做系統的模塊化,更別談讓系統具有強應變能力了。

系統的模塊化設計,不是從程序員開始的,是從需求工程師開始的。

五、要素屬性小結

對于繪制邏輯圖中的三元素之一“要素”的屬性描述,使用了很多的概念(粒度/分層、黑/白盒、系統/模塊、解耦/內聚),這些概念使得對邏輯圖中的要素塊(圖標符號)有了更深入的理解,應用這些概念不但可以在邏輯圖繪制過程中讓圖中傳遞的信息更加清晰、準確、簡潔。

而且在分析、交流問題的過程中也有著很好實用價值,這些概念運用可以讓的軟件工程師的眼、腦、耳、嘴、手等器官在理解、分析和描述問題時具有了立體感、維度感和層次感。

本系列下一篇博文:如何繪制邏輯圖 — 7.邏輯的表達:業務邏輯

 

作者:李鴻君;《大話軟件工程—需求分析與軟件設計》一書作者。

本文由 @李鴻君 原創發布于人人都是產品經理,未經許可,禁止轉載

題圖來自?Unsplash,基于 CC0 協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 沒有舉例,道理雖然懂了,還是不會用

    回復
  2. 太頂了,學到了

    來自廣東 回復