系統(tǒng)架構(gòu)師談企業(yè)應(yīng)用架構(gòu)之系統(tǒng)設(shè)計(jì)規(guī)范與原則1
一、上章回顧
系統(tǒng)架構(gòu)師談企業(yè)應(yīng)用架構(gòu)之系統(tǒng)建模1
系統(tǒng)架構(gòu)師談企業(yè)應(yīng)用架構(gòu)之系統(tǒng)建模2
系統(tǒng)架構(gòu)師談企業(yè)應(yīng)用架構(gòu)之系統(tǒng)建模3
系統(tǒng)架構(gòu)師談企業(yè)應(yīng)用架構(gòu)之系統(tǒng)建模4
在上篇中我們講解了幾類UML2.0語(yǔ)言新推出的建模圖形,總體來(lái)說(shuō)通過(guò)這些圖形能更詳細(xì)的將某類信息表達(dá)出來(lái)。在這里我們簡(jiǎn)單回顧上篇講解的內(nèi)容。
上圖中已經(jīng)簡(jiǎn)單介紹了上章講述的內(nèi)容,具體內(nèi)容請(qǐng)看:系統(tǒng)架構(gòu)師-基礎(chǔ)到企業(yè)應(yīng)用架構(gòu)-系統(tǒng)建模[下篇]。
二、摘要
本章將主要的簡(jiǎn)單介紹在系統(tǒng)架構(gòu)中的設(shè)計(jì)模式及相應(yīng)規(guī)范準(zhǔn)則。并結(jié)合相應(yīng)的代碼來(lái)說(shuō)明如何遵循系統(tǒng)架構(gòu)中的一些基本的設(shè)計(jì)規(guī)范及準(zhǔn)則。而我們將在本文介
紹幾類常用的設(shè)計(jì)規(guī)范,我們先來(lái)看看結(jié)構(gòu)化設(shè)計(jì)的二個(gè)基本原則:
當(dāng)然既然提出了基本的準(zhǔn)則,那么我們?nèi)绾蝸?lái)滿足準(zhǔn)則呢,并且能更好的設(shè)計(jì)呢?我們可以通過(guò)如下手段來(lái)達(dá)到這樣的要求:
當(dāng)然圖中演示了功能分離的策略,通過(guò)把需求按照不同的功能詳細(xì)的劃分開(kāi)來(lái),每個(gè)功能都是獨(dú)立
的,當(dāng)然我們這里也可以成為是關(guān)注點(diǎn)。下面我們將針對(duì)這些原則進(jìn)行詳細(xì)的講解。
三、本章內(nèi)容
1、上章回顧。
2、摘要。
3、本章內(nèi)容。
4、設(shè)計(jì)規(guī)范及原則。
5、如何滿足設(shè)計(jì)要求。
6、本章總結(jié)。
7、系列進(jìn)度。
8、下篇預(yù)告。
四、設(shè)計(jì)規(guī)范及準(zhǔn)則。
1、高內(nèi)聚
首先我們來(lái)看看內(nèi)聚的含義:軟件含義上的內(nèi)聚其實(shí)是從化學(xué)中的分子的內(nèi)聚演變過(guò)來(lái)的,化學(xué)中的分子間的作用力,作用力強(qiáng)則表現(xiàn)為內(nèi)聚程度高。在軟件中內(nèi)
聚程度的高低,標(biāo)識(shí)著軟件設(shè)計(jì)的好壞。
我們?cè)谶M(jìn)行架構(gòu)設(shè)計(jì)時(shí)的內(nèi)聚高低是指,設(shè)計(jì)某個(gè)模塊或者關(guān)注點(diǎn)時(shí),模塊或關(guān)注點(diǎn)內(nèi)部的一系列相關(guān)功能的相關(guān)程度的高低。
例如:下單模塊:
一般情況下,下單模塊都會(huì)有如下的信息,訂單的信息,產(chǎn)品的信息及誰(shuí)下的單(買(mǎi)家信息)。這是基
本的,那么我們?cè)O(shè)計(jì)的時(shí)候就要把相關(guān)的功能內(nèi)聚到一起。當(dāng)然這是從大功能(下單管理)上來(lái)說(shuō),當(dāng)然這些模塊還可以再細(xì)化分成產(chǎn)品、訂單、會(huì)員等子模塊。
例如我們?cè)谠O(shè)計(jì)數(shù)據(jù)庫(kù)操作輔助類提供的方法有:
通過(guò)這樣的方式,那么這個(gè)組件只負(fù)責(zé)數(shù)據(jù)庫(kù)操作。這樣帶來(lái)的好處也是顯而易見(jiàn)的。高內(nèi)
聚提供了更好的可維護(hù)性和可復(fù)用性。而低內(nèi)聚的模塊則表名模塊直接的依賴程度高,那么一旦修改了該模塊依賴的對(duì)象則無(wú)法使用該模塊,必須也進(jìn)行相應(yīng)的修改才
可以繼續(xù)使用。
低內(nèi)聚的模塊設(shè)計(jì)的壞處有:首先模塊的功能不單一,模塊的職責(zé)不明確,比較松散,更有甚者是完成不相關(guān)的功能。這樣的設(shè)計(jì)往往是不可取的??梢酝ㄟ^(guò)重
構(gòu)來(lái)完善。
下面我們來(lái)說(shuō)下高內(nèi)聚的簡(jiǎn)單解釋:什么樣的模塊算是高內(nèi)聚,并且能夠在系統(tǒng)中很好的使用。
那么我們?cè)谠O(shè)計(jì)的過(guò)程中如何去完成高內(nèi)聚呢?
以上基本上講述了高內(nèi)聚的好處,并且闡述了如何實(shí)現(xiàn)高內(nèi)聚的步驟和原則。下面我們來(lái)說(shuō)說(shuō)可能高內(nèi)聚帶來(lái)的壞處。
高內(nèi)聚有時(shí)候也不是說(shuō)所有的情況都采用這樣的原則,當(dāng)然高內(nèi)聚還是要適度的,下面來(lái)舉例說(shuō)明:例如內(nèi)聚性要求強(qiáng)的話就像Windows32中系統(tǒng)提供的
API,里面的函數(shù)太多了,都放在一個(gè)Dll中,那么每個(gè)函數(shù)完成一個(gè)功能。這樣強(qiáng)大的功能,會(huì)比較復(fù)雜,所以并不是完全的高內(nèi)聚越高越好,還是要看實(shí)際的需要。
當(dāng)然維護(hù)起來(lái)也不是特別的方便。
2、低耦合
首先我們來(lái)看看低耦合的定義:低耦合是用來(lái)度量模塊與模塊直接的依賴關(guān)系。耦合當(dāng)然也可以這樣簡(jiǎn)單的理解,我想懂電腦的應(yīng)該都知道,CPU與主板之間的
關(guān)系,CPU如果是特殊的CPU必須使用特殊的主板來(lái)支持,那么如果說(shuō)這個(gè)CPU不唯一依賴唯一主板,那么就認(rèn)為這個(gè)CPU與主板的關(guān)系是低耦合的關(guān)系。
下面我們來(lái)舉例說(shuō)明低耦合的設(shè)計(jì)與高耦合的設(shè)計(jì):
這是一個(gè)簡(jiǎn)單的低耦合的設(shè)計(jì),電器與插座之間是低耦合的關(guān)系,就算我替換了不同的插座,電器依
然可以正常的工作。因此簡(jiǎn)單的描述如下,就是A模塊與B模塊存在依賴關(guān)系,那么當(dāng)B發(fā)生改變時(shí),A模塊仍然可以正常工作,那么就認(rèn)為A與B是低耦合的。
1、筆記本接音響可以正常的使用。
2、筆記本接專配耳機(jī)正常的使用。
對(duì)應(yīng)一般的音響來(lái)說(shuō),筆記本是通用的,音響和筆記本直接的關(guān)系是低耦合的,但是筆記本和耳機(jī)卻是高耦合的,只有專配的耳機(jī)才能和筆記本互聯(lián)使用,而不
是通用的,所以說(shuō)筆記本和專配耳機(jī)存在著較強(qiáng)的依賴關(guān)系。當(dāng)然最簡(jiǎn)單的方式就是筆記本提供統(tǒng)一的耳機(jī)接口,可以滿足一般性的需求。
下面我們將來(lái)分析如何構(gòu)建低耦合的設(shè)計(jì)。
總結(jié)
上面我們已經(jīng)講解了低耦合和高內(nèi)聚的二個(gè)原則,通過(guò)這2個(gè)原則我們知道,滿足這2個(gè)原則是衡量一個(gè)架構(gòu)設(shè)計(jì)好壞的一個(gè)參考標(biāo)準(zhǔn)。下面我們將來(lái)講解通過(guò)
功能分離的方式來(lái)滿足上面的2個(gè)原則。
五、如何滿足設(shè)計(jì)要求
1、如何按功能進(jìn)行模塊化的分離。
我們?cè)趯⒁粋€(gè)系統(tǒng)進(jìn)行功能劃分時(shí),我們一般如下來(lái)進(jìn)行:
首先、我們先把功能職責(zé)劃分成獨(dú)立的單元。
例如現(xiàn)在有個(gè)B2C系統(tǒng),那么我們按照B2C的需求,如下分析:
我們這里簡(jiǎn)單的分析下B2C應(yīng)該具有的功能模塊,當(dāng)然這些模塊的劃分中,有些模
塊還可以繼續(xù)的分離,當(dāng)然我這里只是實(shí)例分析出來(lái)。
2、對(duì)分離出來(lái)的模塊化進(jìn)行抽象,例如我們以支付為例。
這里通過(guò)支付接口向外提供服務(wù)。那么外界模塊不關(guān)心支付系統(tǒng)模塊的變化,只需要調(diào)用接口
即可,如果具體的支付方式,比如支付寶的方式發(fā)生改變,在調(diào)用支付服務(wù)的模塊中也不需要做任何的修改就可以正常的提供服務(wù)。顯然這樣的方式是不錯(cuò)的實(shí)現(xiàn)方
式。
通常情況下我們?cè)谙到y(tǒng)分離式只是以接口的方式提供服務(wù),供其他的模塊進(jìn)行使用。在模塊內(nèi)部有大量的信息是不要向外部暴露的,所以模塊在設(shè)計(jì)時(shí)訪問(wèn)域的定
義就要?jiǎng)澐趾茫乐挂驗(yàn)樵L問(wèn)域的定義而對(duì)模塊的信息造成破壞。
下面我們來(lái)看下功能分離在不同的設(shè)計(jì)理念下都是什么樣的表現(xiàn):
上面只是實(shí)體性的分析了功能分離的好處及應(yīng)用的廣度,當(dāng)然我們?cè)诤罄m(xù)會(huì)結(jié)合實(shí)例來(lái)講解如何來(lái)實(shí)現(xiàn)這樣的軟件設(shè)計(jì)模式。當(dāng)然這只是軟件的架構(gòu)設(shè)計(jì),那么如
果細(xì)化到具體的實(shí)現(xiàn)呢?我們?nèi)绾稳ピO(shè)計(jì)每個(gè)功能點(diǎn)呢?這就是下章我們要講解的內(nèi)容了,那么本文先列出二種常見(jiàn)的方式。
下篇我們將針對(duì)設(shè)計(jì)原則中的實(shí)現(xiàn)方式,進(jìn)行詳細(xì)的剖析與具體實(shí)現(xiàn)進(jìn)行舉例講解,希望大家多提意見(jiàn)。
六、本章總結(jié)。
本章中主要簡(jiǎn)單的講述了軟件設(shè)計(jì)的二個(gè)基本的規(guī)范與原則:
1、高內(nèi)聚:描述了模塊內(nèi)部的一系列功能的相關(guān)程度,對(duì)于功能之間相關(guān)度不高或者根本沒(méi)有相關(guān)性的功能包含在模塊中的做法是不可取的。
2、低耦合:描述了模塊直接的依賴、感知程度,耦合的衡量標(biāo)準(zhǔn)是從低到高,一般來(lái)說(shuō)耦合度越低越好。
當(dāng)然有些特殊情況下,可能這二個(gè)原則也有矛盾的地方,當(dāng)然我們還是要根據(jù)項(xiàng)目的實(shí)際需要及情況進(jìn)行抉擇,當(dāng)然這二個(gè)原則是為了設(shè)計(jì)提供更好的擴(kuò)展性、
可讀性、可維護(hù)性、極高的可復(fù)用性,所以要求我們?cè)谠O(shè)計(jì)時(shí)盡量去滿足這二個(gè)基本原則。而幫我去達(dá)到這二個(gè)準(zhǔn)則的途徑就是通過(guò)功能分離及細(xì)化來(lái)實(shí)現(xiàn)這樣的準(zhǔn)
則。下一篇我們將深入的分析與舉例來(lái)說(shuō)明實(shí)現(xiàn)這二個(gè)原則的各種規(guī)范及準(zhǔn)則。
八、下篇預(yù)告。
下一篇將會(huì)已我們將深入的講解功能分離的設(shè)計(jì)準(zhǔn)則及實(shí)現(xiàn)方式,如何在設(shè)計(jì)中使用設(shè)計(jì)模式來(lái)構(gòu)建滿足高內(nèi)聚、低耦合的功能模塊等等。將通過(guò)實(shí)例化的方式對(duì)
每種原則及實(shí)現(xiàn)模式進(jìn)行分析和舉例。如果大家有好的意見(jiàn)和建議可以及時(shí)反饋,謝謝您的寶貴意見(jiàn)。
后語(yǔ)
希望看完本章的朋友可以從本篇中學(xué)到相應(yīng)的軟件設(shè)計(jì)規(guī)范,懂的人可以溫習(xí)下相應(yīng)設(shè)計(jì)準(zhǔn)則,本篇希望能夠拋磚引玉,希望大家能夠多提出寶貴意見(jiàn)。由于是本
人平時(shí)工作中的理解與總結(jié),不足之處再所難免,還請(qǐng)大家批評(píng)指出!如果您有什么意見(jiàn)或建議,請(qǐng)多多提出!大家的支持就是我的***動(dòng)力!
作者:CallHot-何戈洲
出處:http://www.cnblogs.com/hegezhou_hot/
關(guān)于作者:專注于微軟平臺(tái)項(xiàng)目架構(gòu)、管理和企業(yè)解決方案。熟悉設(shè)計(jì)模式、極限編程、架構(gòu)設(shè)計(jì)、敏捷開(kāi)發(fā)和項(xiàng)目管理?,F(xiàn)主要從事WinForm、ASP.NET、等方面的項(xiàng)目開(kāi)發(fā)、架構(gòu)、管理工作。如有問(wèn)題或建議,請(qǐng)多多賜教!
【編輯推薦】