系統(tǒng)架構(gòu)設(shè)計整潔之道_第1頁
系統(tǒng)架構(gòu)設(shè)計整潔之道_第2頁
系統(tǒng)架構(gòu)設(shè)計整潔之道_第3頁
系統(tǒng)架構(gòu)設(shè)計整潔之道_第4頁
系統(tǒng)架構(gòu)設(shè)計整潔之道_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 Page * MERGEFORMAT 14系統(tǒng)架構(gòu)設(shè)計整潔之道目 錄 TOC o 1-3 h z u HYPERLINK l _Toc44448598 一、架構(gòu)設(shè)計的目標(biāo) PAGEREF _Toc44448598 h 3 HYPERLINK l _Toc44448599 二、軟件系統(tǒng)的價值 PAGEREF _Toc44448599 h 3 HYPERLINK l _Toc44448600 三、編程范式 PAGEREF _Toc44448600 h 4 HYPERLINK l _Toc44448601 四、設(shè)計原則 PAGEREF _Toc44448601 h 5 HYPERLINK l _T

2、oc44448602 五、組件 PAGEREF _Toc44448602 h 7 HYPERLINK l _Toc44448603 六、封裝方式 PAGEREF _Toc44448603 h 10 HYPERLINK l _Toc44448604 七、軟件架構(gòu) PAGEREF _Toc44448604 h 10一、架構(gòu)設(shè)計的目標(biāo)用最少的人力成本滿足構(gòu)建和維護該系統(tǒng)的需求衡量指標(biāo)工程師團隊規(guī)模代碼總行數(shù)代碼變更行數(shù)二、軟件系統(tǒng)的價值行為價值按需求文檔編寫代碼可用性功能性bug性能穩(wěn)定性緊急,但是并不總是重要架構(gòu)價值當(dāng)需求變更時,所需的軟件變更必須簡單方便變更實施的難度應(yīng)該和變更的范疇(scope

3、)成等比,而與變更的具體形狀(shape)無關(guān)不緊急三、編程范式目的:設(shè)置限制,告訴我們不可以做什么現(xiàn)有范式結(jié)構(gòu)化編程目的:對控制權(quán)的直接轉(zhuǎn)移進行了限制和規(guī)范內(nèi)容:可以用順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)這三種結(jié)構(gòu)構(gòu)造出任何結(jié)構(gòu);限制goto的使用。意義:用代碼把一些已證明的結(jié)構(gòu)串聯(lián)起來,就可以推導(dǎo)出整個程序的正確性。實際上沒有辦法證明每個程序段是正確的,只能證偽,如果所有的基本單元都無法證偽,那么整個就是無法證偽的,那目前就是正確的。延伸:物理學(xué)與數(shù)學(xué)的區(qū)別,物理學(xué)的基本公式都是沒有辦法證明的,只能證偽,所以物理學(xué)是實驗科學(xué),沒有一個公式是完全靠得住的,只是目前靠得住。數(shù)學(xué)的基本公式都是可以證明的

4、。面向?qū)ο缶幊棠康模簩Τ绦蚩刂茩?quán)的間接轉(zhuǎn)移進行了限制和規(guī)范定義封裝:只暴露部分函數(shù),數(shù)據(jù)則完全不暴露繼承多態(tài):其實只是函數(shù)指針的一種應(yīng)用,通過接口和實現(xiàn),抽象類和繼承,替代了函數(shù)指針的使用意義:函數(shù)指針,是跨越組件邊界的方法,是組件獨立部署的基礎(chǔ),依賴反轉(zhuǎn)的基礎(chǔ)。依賴反轉(zhuǎn)指的是讓依賴與控制流向相反。函數(shù)式編程目的:對賦值進行了限制和規(guī)范趨勢:如果有足夠大的存儲量和計算量,應(yīng)用程序可以用事件溯源的方式,用完全不可變的函數(shù)式編程,只通過事務(wù)記錄,從頭計算狀態(tài)意義:所有的競爭問題、死鎖問題、并發(fā)問題都是由可變變量導(dǎo)致的。應(yīng)用:通過將狀態(tài)修改的部分和不需要修改的部分分隔成單獨的組件,提高系統(tǒng)的穩(wěn)定性和

5、效率四、設(shè)計原則意義如何將數(shù)據(jù)和函數(shù)組織成類如何將類鏈接起來成為組件和程序開閉原則(OCP)目標(biāo):讓系統(tǒng)易于擴展,同時限制每次修改所影響的范圍實現(xiàn):劃分組件,并將組件間依賴關(guān)系按層次結(jié)構(gòu)進行組織本原則是我們進行架構(gòu)設(shè)計的主導(dǎo)原則單一職責(zé)原則(SRP)目標(biāo):指導(dǎo)類、組件拆分定義任何一個軟件模塊,都應(yīng)該有且只有一個被修改的原因“被修改的原因”指系統(tǒng)的用戶或所有者痛點同樣的一塊邏輯,如果服務(wù)于兩個價值主體,因為一個價值主體而修改,那么第二個價值主體期望的功能將被影響。比如CTO和COO都要員工的工時,分別用于計算薪酬和匯報,兩者的計算方式可能目前是相同的,一方有了更改,另一方就bug了如果一塊代碼,

6、歸屬于兩個團隊共同維護,就會有代碼合并問題里氏替換原則(LSP)目標(biāo):指導(dǎo)接口與實現(xiàn)方式【邊界處理】內(nèi)容不是實現(xiàn)了同一個接口,它們的行為就是一致并可以互相替換,長方形正方形是典型的案例如果兩個組件,替換之后需要分別做特別的設(shè)置,那就說明抽象得還不足夠,會引入許多if-else,可以配置清單等方式消除接口隔離原則(ISP)目標(biāo):指導(dǎo)接口的定義【邊界處理】內(nèi)容不依賴任何不需要的組件、類、方法如果不同的用戶分別使用一個大接口的幾個不同方法,那么應(yīng)該把這個大接口拆分為針對這些用戶的小接口依賴反轉(zhuǎn)原則(DIP)目標(biāo):指導(dǎo)依賴方向【依賴】內(nèi)容:組件間跨越邊界的源碼依賴的方向永遠與控制流的方向相反五、組件定

7、義:是軟件的部署單元,是整個軟件系統(tǒng)可以獨立完成部署的最小實體拆分原則REP:復(fù)用、發(fā)布等同原則內(nèi)容:軟件復(fù)用的最小粒度應(yīng)等同于其發(fā)布的最小粒度CCP:共同閉包原則內(nèi)容:將為了相同目的而同時修改的類放在同一個組件中,是SRP原則在組件層面的描述執(zhí)行對大部分應(yīng)用程序而言,可維護性的重要性遠遠大于可復(fù)用性因為一個原因需要做修改,這個修改最好在同一個組件中,如果分散在多個組件中,那么開發(fā)、提交、部署的成本都會上升CRP:共同復(fù)用原則內(nèi)容:不要強迫一個組件依賴它不需要的東西,是ISP原則在組件層面的描述張力圖架構(gòu)設(shè)計中有許多矛盾,研發(fā)性和復(fù)用性的矛盾,而研發(fā)性本身又有粘性(CCP)和排斥性(CRP)的

8、矛盾架構(gòu)師做的往往是在這個張力圖中找到一個最符合現(xiàn)在需要的點,而這個平衡也是不斷變化的,根據(jù)項目的規(guī)模、迭代的節(jié)奏等依賴原則無依賴環(huán)原則互相依賴的組件,實際上組成了一個大組件,這三個組件要一起發(fā)布、一起做單元測試通過依賴反轉(zhuǎn)原則可以解依賴環(huán)穩(wěn)定依賴原則內(nèi)容依賴必須指向更穩(wěn)定的方向,接口是最穩(wěn)定的組件的穩(wěn)定性,指的是組件的變更困難度,影響因素有很多,比如代碼的體量大小、復(fù)雜度、清晰度等,但是最重要的一個因素就是依賴的數(shù)量讓組件難于修改的一個最直接的辦法就是讓很多其它組件依賴與它組件的穩(wěn)定性和它的變更頻繁度沒有直接的關(guān)聯(lián)?;蛘哒f,穩(wěn)定性可以分為價值(需求)的穩(wěn)定性,和組件自身的穩(wěn)定性定量指標(biāo):不穩(wěn)

9、定性(I)=出向依賴數(shù)量/(入向依賴數(shù)量 + 出現(xiàn)依賴數(shù)量)方法:可以通過抽接口,共同依賴接口的方式,修正違反穩(wěn)定依賴的地方穩(wěn)定抽象原則內(nèi)容一個組件的抽象化程度應(yīng)該與其穩(wěn)定性保持一致為了防止高階架構(gòu)設(shè)計和高階策略難以修改,通常抽象出穩(wěn)定的接口或抽象類。越穩(wěn)定的庫就應(yīng)該越抽象,這樣它的穩(wěn)定性就不會影響它的擴展性定量描述抽象程度(A)=組件中抽象類和接口的數(shù)量/組件中類的數(shù)量將不穩(wěn)定性和抽象程度分別作為橫軸和縱軸,畫一個二維的圖,(0,1)-(1,0)連線就是主序列線??拷?0,0)的區(qū)域是痛苦區(qū),改動成本很大,但是又很具體??拷?1,1)的是無用區(qū),非常抽象,但是沒有別的組件依賴它,改動成本很小

10、,通常是廢棄的。離主序列線的距離D=|A+I-1|,可以定量化的衡量一個組件的健康程度。在D滿足期望的條件下,越靠近(0,1)和(1,0)越好六、封裝方式經(jīng)典的封裝方式按層封裝問題無法展現(xiàn)具體的業(yè)務(wù)領(lǐng)域不能防止跨層調(diào)用。通常情況下,繞過業(yè)務(wù)邏輯是不合理的,尤其是要控制權(quán)限時按功能封裝端口和適配器按組件封裝組織形式與封裝的區(qū)別如果沒有封裝和隱藏功能,采用任何架構(gòu)風(fēng)格都沒有區(qū)別七、軟件架構(gòu)目的終極目的:最大化程序員的生產(chǎn)力,最小化系統(tǒng)的總運營成本細化目標(biāo):支撐軟件系統(tǒng)的全生命周期,讓系統(tǒng)便于理解、易于修改、方便維護、輕松部署方針盡可能長時間地保留盡可能多的可選項選項指的是無關(guān)緊要的細節(jié)設(shè)計選項例子

11、具體選用哪個存儲方式,或哪個數(shù)據(jù)庫使用哪種web服務(wù)使用哪種框架邊界越完善,開發(fā)和部署成本越高。所以不完全邊界能解決的,不要用完全邊界;低層次解耦能解決的,不要用高層次解耦內(nèi)容組件拆分切分水平分層按用例垂直切分重復(fù)性解耦模式源碼層次部署層次服務(wù)層次從上到下,開發(fā)、部署成本依次升高,如果低層次的解耦已經(jīng)滿足需要,不要進行高層次的解耦組件排列(依賴)依賴關(guān)系與數(shù)據(jù)流控制流脫鉤,與組件所在層次掛鉤。所以組件的依賴是與組件的水平分層息息相關(guān)的分層業(yè)務(wù)實體用例接口適配器框架與驅(qū)動程序測試層組件通信方式接口調(diào)用服務(wù)調(diào)用完全邊界調(diào)用雙方都聲明接口專用的輸入數(shù)據(jù)類型專用的返回數(shù)據(jù)類型不完全邊界省掉最后一步:保留到源碼層次的解耦;聲明好接口,做好分割后,仍然放在一個組件中,等到時機成熟時再拆出來獨立編譯部署單向邊界:正常的切割,應(yīng)該使用兩個接口,兩個類各自使用對方的接口,而不是直接使用類,但是這樣的開發(fā)成本很大,所以,只實現(xiàn)一個接口,高層用接口調(diào)用低層,而低層直接使用高層的類門戶模式:控制權(quán)的間接轉(zhuǎn)移不用接口和實現(xiàn)去做,而是用門戶類去做,接口都不用聲明了軟件系統(tǒng)的生命周期開發(fā)不同團隊負責(zé)的組件不交叉不使用大量復(fù)雜的腳手架部署減少組件數(shù)量,內(nèi)部組件外部組件結(jié)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論