如何绘制逻辑图 — 6.要素的属性:内聚与解耦
在上一篇文中介紹了描述要素歸集名稱的屬性(系統(tǒng)與模塊),這一篇要說明描述要素歸屬的原則屬性。
松耦合和高內(nèi)聚,是決定最終完成系統(tǒng)是否具有應(yīng)變性、復(fù)用性的重要設(shè)計原則,作為在分析和設(shè)計一線的需求工程師也必須要理解和掌握,因為在需求分析和業(yè)務(wù)設(shè)計中沒有做到,那么到了后面的開發(fā)階段再考慮就晚了。后期僅用技術(shù)手段讓系統(tǒng)獲得同等的應(yīng)變/復(fù)用能力,可能要付出很大的成本、同時系統(tǒng)可能也因此變得更加復(fù)雜。所以,松耦合與高內(nèi)聚的設(shè)計,是從需求工程師的工作開始的。
■屬性4:解耦與內(nèi)聚,是描述要素歸集原則的重要概念。
分層與粒度說明了要素的大小;系統(tǒng)與模塊說明了要素的歸集單位。下面討論形成系統(tǒng)的原則是什么。打個比方說:將不該放到一起的要素放到了同一個盒子內(nèi),就會造成每個盒子內(nèi)的要素總會受到另一個盒子內(nèi)的要素牽扯,造成無法將盒子蓋上蓋子形成黑盒(的狀態(tài)),在黑盒與白盒一篇中講到了,如果研究對象處于這樣的狀態(tài)就無法對同一層的要素進(jìn)行黑盒狀態(tài)的分析和研究。那么什么樣的要素可以放在一起,什么樣的要素不能放在一起呢?解決這個問題需要引入解耦和內(nèi)聚的概念。
1. 解耦的概念
■耦合:是指兩個或兩個以上的系統(tǒng)(要素的集合體)的輸入與輸出之間存在緊密配合與相互影響,某一方的變動會影響到另一方的變化。
■解耦:指的就是解開耦合的狀態(tài),去掉兩者之間造成耦合的連接關(guān)系。
耦合有兩種狀態(tài):緊耦合、松耦合,舉例說明兩者的概念和關(guān)系。
假定某個對象的內(nèi)部是由4個子系統(tǒng)構(gòu)成的,分別為系統(tǒng)1、系統(tǒng)2、系統(tǒng)3、系統(tǒng)4。如圖1所示。
圖1 緊耦合與松耦合的示意
1) 緊耦合
從系統(tǒng)1、系統(tǒng)2、系統(tǒng)3這三者之間的關(guān)系可以看出,不同系統(tǒng)內(nèi)部的要素之間發(fā)生了密切關(guān)聯(lián),三個系統(tǒng)之間兩兩成對地形成了非常復(fù)雜的依賴關(guān)系,三個系統(tǒng)因“蓋不上蓋子”都不能形成黑盒,這種狀態(tài)就是“緊耦合”狀態(tài)。
2)松耦合
系統(tǒng)4與其它系統(tǒng)之間的關(guān)系是非常清晰、簡單的,分別只有一個接口,可以看出系統(tǒng)4 內(nèi)部的要素并不直接與其他系統(tǒng)中的要素直接關(guān)聯(lián),而是由統(tǒng)一的接口進(jìn)行關(guān)聯(lián),也就是說,系統(tǒng)4和其它和系統(tǒng)之間雖然有關(guān)聯(lián),但不是復(fù)雜的依賴關(guān)系,這種由唯一或是標(biāo)準(zhǔn)關(guān)聯(lián)形成的關(guān)系就是松耦合。
解耦,簡單地說,就是將上述的“緊耦合”狀態(tài)解開,形成“松耦合”的狀態(tài)。
解耦概念說明,當(dāng)分析對象內(nèi)部的系統(tǒng)之間都是緊耦合關(guān)系時,那么各個系統(tǒng)就不能在“黑盒狀態(tài)”下進(jìn)行分析設(shè)計了,因為,各個系統(tǒng)都存在著系統(tǒng)內(nèi)要素之間的依賴關(guān)系,也不可能在不考慮這些依賴關(guān)系的前提下,將各個系統(tǒng)看成是黑盒了。
解耦概念對后續(xù)分析與設(shè)計有著非常實際的指導(dǎo)意義,比如:某個產(chǎn)品的生產(chǎn)過程在企業(yè)內(nèi)部大都是由多部門協(xié)同完成的,業(yè)務(wù)流程大多要跨部門才能完成,最佳的流程設(shè)計是部門之間的交互最少,最大限度地減少不同部門內(nèi)部工種之間發(fā)生的直接依賴。避免由于某個部門內(nèi)部某個工種的作業(yè)內(nèi)容發(fā)生了變化而引起其它部門的連鎖反應(yīng)。
2. 內(nèi)聚的概念
■內(nèi)聚:是說明同一個系統(tǒng)中各個要素之間的關(guān)聯(lián)性。
理想的內(nèi)聚狀態(tài),如圖2所示,對象中的每個系統(tǒng)都可以獨立地完成一個業(yè)務(wù)領(lǐng)域的工作,且各個系統(tǒng)內(nèi)部的要素之間關(guān)系緊密。也就是說,每個系統(tǒng)內(nèi)所有的要素都是為了完成同一個目標(biāo)而存在的,比如:對于財務(wù)系統(tǒng)來說,既不要把財務(wù)系統(tǒng)的功能劃分到其他系統(tǒng)中,也不將其它系統(tǒng)中的非財務(wù)功能拉入到財務(wù)系統(tǒng)中來。
內(nèi)聚的概念說明,各個系統(tǒng)內(nèi)部的要素要按照“內(nèi)聚”的標(biāo)準(zhǔn)放在一起,各個系統(tǒng)之間通過一定的接口進(jìn)行相互調(diào)用,而各系統(tǒng)內(nèi)的要素之間沒有直接關(guān)聯(lián)。這樣在進(jìn)行討論時一個系統(tǒng)就可以用一個黑盒來表示。
圖2 內(nèi)聚概念的示意
內(nèi)聚的實際意義在于,在設(shè)計時讓每個系統(tǒng)具有的功能都相對獨立、單一,這樣就容易進(jìn)行拆分、并通過不同的組合靈活地滿足各種需求。
3. 高內(nèi)聚與松耦合
系統(tǒng)內(nèi)要素間的內(nèi)聚程度高就稱之為“高內(nèi)聚”,系統(tǒng)間的關(guān)聯(lián)程度低就稱之為“松耦合(或低耦合)”,參見圖3的對比可以看出來,內(nèi)聚和耦合之間的關(guān)系。
圖3 高內(nèi)聚與松耦合的示意
1) 高內(nèi)聚
高內(nèi)聚的系統(tǒng)內(nèi)的功能要素要做到高度的相似聚合,共同為一個目標(biāo)服務(wù)。圖3(a)中系統(tǒng)1、2、3就沒有做到高內(nèi)聚,而是緊耦合,系統(tǒng)內(nèi)部之間的交互非常繁雜。而圖3(b)的情況就完全不同了,各個系統(tǒng)的內(nèi)部都做到了高內(nèi)聚。
2) 松耦合
在同一對象內(nèi)的各個系統(tǒng)之間要盡量做到松耦合,系統(tǒng)之間具有最小的相關(guān)度,圖3(a)中系統(tǒng)之間沒有做到,對圖3(b)內(nèi)系統(tǒng)之間實現(xiàn)了松耦合,因此圖3(b)構(gòu)造看上去就非常的干凈、舒服。
判斷信息系統(tǒng)架構(gòu)優(yōu)劣的重要原則之一就是:系統(tǒng)之間是否進(jìn)行了松耦合的設(shè)計,它關(guān)系到系統(tǒng)運行后的維護(hù)成本,而且還極大地影響到系統(tǒng)的擴展性、對需求變化的響應(yīng)能力、甚至是系統(tǒng)的生命周期。
4.內(nèi)聚與解耦的作用
內(nèi)聚和解耦的作用,不但對于從事編碼開發(fā)的工程師重要,對于從事需求分析和軟件設(shè)計的工程師來說更為重要也不為過,因為完成一個好的系統(tǒng)是從分析和設(shè)計開始,如果前期的分析和設(shè)計將業(yè)務(wù)都耦合在一起了,那么后續(xù)從技術(shù)架構(gòu)和開發(fā)層面再怎么努力,可能也挽回不了系統(tǒng)整體的緊耦合狀態(tài),或是需要花費巨大的成本(時間、資源)才能收到很小的效果。
圖4給出了一個企業(yè)架構(gòu)的框架示意圖,這個圖是由不同的子系統(tǒng)、模塊構(gòu)成的,在繪制過程中注意了高內(nèi)聚、松耦合的設(shè)計原則,每個子系統(tǒng)、或是模塊都可以隨著需求的變化而被替換。
圖4 企業(yè)架構(gòu)的框架圖(不同系統(tǒng)的組合關(guān)系)
■擴展說明
“功能做到模塊化、快速響應(yīng)客戶的需求變化”是軟件行業(yè)一直追求的目標(biāo),不能快速地響應(yīng)時代的變化的系統(tǒng),隨著時間的推移就失去了存在的價值。但是很多軟件工程師并不清楚達(dá)成這個目標(biāo)與業(yè)務(wù)人員的相關(guān)性,不清楚業(yè)務(wù)人員對系統(tǒng)的模塊化設(shè)計和結(jié)果起著非常重要的作用。因為這些目標(biāo)的達(dá)成都需要一個非常重要前提,那就是對“業(yè)務(wù)的拆分”,首先要將研究對象拆分成為若干個小的可以獨立的要素,才可能實現(xiàn)“將一個大的系統(tǒng)分解成多個小的、獨立的功能/組件,然后通過它們的不同組合來處理復(fù)雜的、大型的、多變的問題”。也就是說,業(yè)務(wù)人員能否將研究對象進(jìn)行有效的拆分、并給出變化的規(guī)律性是關(guān)鍵,如果業(yè)務(wù)人員做不到,那么在后續(xù)的技術(shù)設(shè)計和開發(fā)時就很難做系統(tǒng)的模塊化,更別談讓系統(tǒng)具有強應(yīng)變能力了。
系統(tǒng)的模塊化設(shè)計,不是從程序員開始的,是從需求工程師開始的。
■ 要素屬性小結(jié)
對于繪制邏輯圖中的三元素之一“要素”的屬性描述,使用了很多的概念(粒度/分層、黑/白盒、系統(tǒng)/模塊、解耦/內(nèi)聚),這些概念使得對邏輯圖中的要素塊(圖標(biāo)符號)有了更深入的理解,應(yīng)用這些概念不但可以在邏輯圖繪制過程中讓圖中傳遞的信息更加清晰、準(zhǔn)確、簡潔。而且在分析、交流問題的過程中也有著很好實用價值,這些概念運用可以讓的軟件工程師的眼、腦、耳、嘴、手等器官在理解、分析和描述問題時具有了立體感、維度感和層次感。
下一篇介紹邏輯圖三元素中的“邏輯表達(dá)”
*1:詳細(xì)的內(nèi)容說明請參見《大話軟件工程—需求分析與軟件設(shè)計》一書。
總結(jié)
以上是生活随笔為你收集整理的如何绘制逻辑图 — 6.要素的属性:内聚与解耦的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thymeleaf入门简介
- 下一篇: Thymeleaf 标准表达式语法