版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 Page * MERGEFORMAT 14系統(tǒng)架構(gòu)設(shè)計(jì)整潔之道目 錄 TOC o 1-3 h z u HYPERLINK l _Toc44448598 一、架構(gòu)設(shè)計(jì)的目標(biāo) PAGEREF _Toc44448598 h 3 HYPERLINK l _Toc44448599 二、軟件系統(tǒng)的價(jià)值 PAGEREF _Toc44448599 h 3 HYPERLINK l _Toc44448600 三、編程范式 PAGEREF _Toc44448600 h 4 HYPERLINK l _Toc44448601 四、設(shè)計(jì)原則 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è)計(jì)的目標(biāo)用最少的人力成本滿足構(gòu)建和維護(hù)該系統(tǒng)的需求衡量指標(biāo)工程師團(tuán)隊(duì)規(guī)模代碼總行數(shù)代碼變更行數(shù)二、軟件系統(tǒng)的價(jià)值行為價(jià)值按需求文檔編寫代碼可用性功能性bug性能穩(wěn)定性緊急,但是并不總是重要架構(gòu)價(jià)值當(dāng)需求變更時(shí),所需的軟件變更必須簡單方便變更實(shí)施的難度應(yīng)該和變更的范疇(scope
3、)成等比,而與變更的具體形狀(shape)無關(guān)不緊急三、編程范式目的:設(shè)置限制,告訴我們不可以做什么現(xiàn)有范式結(jié)構(gòu)化編程目的:對(duì)控制權(quán)的直接轉(zhuǎn)移進(jì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)出整個(gè)程序的正確性。實(shí)際上沒有辦法證明每個(gè)程序段是正確的,只能證偽,如果所有的基本單元都無法證偽,那么整個(gè)就是無法證偽的,那目前就是正確的。延伸:物理學(xué)與數(shù)學(xué)的區(qū)別,物理學(xué)的基本公式都是沒有辦法證明的,只能證偽,所以物理學(xué)是實(shí)驗(yàn)科學(xué),沒有一個(gè)公式是完全靠得住的,只是目前靠得住。數(shù)學(xué)的基本公式都是可以證明的
4、。面向?qū)ο缶幊棠康模簩?duì)程序控制權(quán)的間接轉(zhuǎn)移進(jìn)行了限制和規(guī)范定義封裝:只暴露部分函數(shù),數(shù)據(jù)則完全不暴露繼承多態(tài):其實(shí)只是函數(shù)指針的一種應(yīng)用,通過接口和實(shí)現(xiàn),抽象類和繼承,替代了函數(shù)指針的使用意義:函數(shù)指針,是跨越組件邊界的方法,是組件獨(dú)立部署的基礎(chǔ),依賴反轉(zhuǎn)的基礎(chǔ)。依賴反轉(zhuǎn)指的是讓依賴與控制流向相反。函數(shù)式編程目的:對(duì)賦值進(jìn)行了限制和規(guī)范趨勢(shì):如果有足夠大的存儲(chǔ)量和計(jì)算量,應(yīng)用程序可以用事件溯源的方式,用完全不可變的函數(shù)式編程,只通過事務(wù)記錄,從頭計(jì)算狀態(tài)意義:所有的競爭問題、死鎖問題、并發(fā)問題都是由可變變量導(dǎo)致的。應(yīng)用:通過將狀態(tài)修改的部分和不需要修改的部分分隔成單獨(dú)的組件,提高系統(tǒng)的穩(wěn)定性和
5、效率四、設(shè)計(jì)原則意義如何將數(shù)據(jù)和函數(shù)組織成類如何將類鏈接起來成為組件和程序開閉原則(OCP)目標(biāo):讓系統(tǒng)易于擴(kuò)展,同時(shí)限制每次修改所影響的范圍實(shí)現(xiàn):劃分組件,并將組件間依賴關(guān)系按層次結(jié)構(gòu)進(jìn)行組織本原則是我們進(jìn)行架構(gòu)設(shè)計(jì)的主導(dǎo)原則單一職責(zé)原則(SRP)目標(biāo):指導(dǎo)類、組件拆分定義任何一個(gè)軟件模塊,都應(yīng)該有且只有一個(gè)被修改的原因“被修改的原因”指系統(tǒng)的用戶或所有者痛點(diǎn)同樣的一塊邏輯,如果服務(wù)于兩個(gè)價(jià)值主體,因?yàn)橐粋€(gè)價(jià)值主體而修改,那么第二個(gè)價(jià)值主體期望的功能將被影響。比如CTO和COO都要員工的工時(shí),分別用于計(jì)算薪酬和匯報(bào),兩者的計(jì)算方式可能目前是相同的,一方有了更改,另一方就bug了如果一塊代碼,
6、歸屬于兩個(gè)團(tuán)隊(duì)共同維護(hù),就會(huì)有代碼合并問題里氏替換原則(LSP)目標(biāo):指導(dǎo)接口與實(shí)現(xiàn)方式【邊界處理】內(nèi)容不是實(shí)現(xiàn)了同一個(gè)接口,它們的行為就是一致并可以互相替換,長方形正方形是典型的案例如果兩個(gè)組件,替換之后需要分別做特別的設(shè)置,那就說明抽象得還不足夠,會(huì)引入許多if-else,可以配置清單等方式消除接口隔離原則(ISP)目標(biāo):指導(dǎo)接口的定義【邊界處理】內(nèi)容不依賴任何不需要的組件、類、方法如果不同的用戶分別使用一個(gè)大接口的幾個(gè)不同方法,那么應(yīng)該把這個(gè)大接口拆分為針對(duì)這些用戶的小接口依賴反轉(zhuǎn)原則(DIP)目標(biāo):指導(dǎo)依賴方向【依賴】內(nèi)容:組件間跨越邊界的源碼依賴的方向永遠(yuǎn)與控制流的方向相反五、組件定
7、義:是軟件的部署單元,是整個(gè)軟件系統(tǒng)可以獨(dú)立完成部署的最小實(shí)體拆分原則REP:復(fù)用、發(fā)布等同原則內(nèi)容:軟件復(fù)用的最小粒度應(yīng)等同于其發(fā)布的最小粒度CCP:共同閉包原則內(nèi)容:將為了相同目的而同時(shí)修改的類放在同一個(gè)組件中,是SRP原則在組件層面的描述執(zhí)行對(duì)大部分應(yīng)用程序而言,可維護(hù)性的重要性遠(yuǎn)遠(yuǎn)大于可復(fù)用性因?yàn)橐粋€(gè)原因需要做修改,這個(gè)修改最好在同一個(gè)組件中,如果分散在多個(gè)組件中,那么開發(fā)、提交、部署的成本都會(huì)上升CRP:共同復(fù)用原則內(nèi)容:不要強(qiáng)迫一個(gè)組件依賴它不需要的東西,是ISP原則在組件層面的描述張力圖架構(gòu)設(shè)計(jì)中有許多矛盾,研發(fā)性和復(fù)用性的矛盾,而研發(fā)性本身又有粘性(CCP)和排斥性(CRP)的
8、矛盾架構(gòu)師做的往往是在這個(gè)張力圖中找到一個(gè)最符合現(xiàn)在需要的點(diǎn),而這個(gè)平衡也是不斷變化的,根據(jù)項(xiàng)目的規(guī)模、迭代的節(jié)奏等依賴原則無依賴環(huán)原則互相依賴的組件,實(shí)際上組成了一個(gè)大組件,這三個(gè)組件要一起發(fā)布、一起做單元測試通過依賴反轉(zhuǎn)原則可以解依賴環(huán)穩(wěn)定依賴原則內(nèi)容依賴必須指向更穩(wěn)定的方向,接口是最穩(wěn)定的組件的穩(wěn)定性,指的是組件的變更困難度,影響因素有很多,比如代碼的體量大小、復(fù)雜度、清晰度等,但是最重要的一個(gè)因素就是依賴的數(shù)量讓組件難于修改的一個(gè)最直接的辦法就是讓很多其它組件依賴與它組件的穩(wěn)定性和它的變更頻繁度沒有直接的關(guān)聯(lián)?;蛘哒f,穩(wěn)定性可以分為價(jià)值(需求)的穩(wěn)定性,和組件自身的穩(wěn)定性定量指標(biāo):不穩(wěn)
9、定性(I)=出向依賴數(shù)量/(入向依賴數(shù)量 + 出現(xiàn)依賴數(shù)量)方法:可以通過抽接口,共同依賴接口的方式,修正違反穩(wěn)定依賴的地方穩(wěn)定抽象原則內(nèi)容一個(gè)組件的抽象化程度應(yīng)該與其穩(wěn)定性保持一致為了防止高階架構(gòu)設(shè)計(jì)和高階策略難以修改,通常抽象出穩(wěn)定的接口或抽象類。越穩(wěn)定的庫就應(yīng)該越抽象,這樣它的穩(wěn)定性就不會(huì)影響它的擴(kuò)展性定量描述抽象程度(A)=組件中抽象類和接口的數(shù)量/組件中類的數(shù)量將不穩(wěn)定性和抽象程度分別作為橫軸和縱軸,畫一個(gè)二維的圖,(0,1)-(1,0)連線就是主序列線。靠近(0,0)的區(qū)域是痛苦區(qū),改動(dòng)成本很大,但是又很具體??拷?1,1)的是無用區(qū),非常抽象,但是沒有別的組件依賴它,改動(dòng)成本很小
10、,通常是廢棄的。離主序列線的距離D=|A+I-1|,可以定量化的衡量一個(gè)組件的健康程度。在D滿足期望的條件下,越靠近(0,1)和(1,0)越好六、封裝方式經(jīng)典的封裝方式按層封裝問題無法展現(xiàn)具體的業(yè)務(wù)領(lǐng)域不能防止跨層調(diào)用。通常情況下,繞過業(yè)務(wù)邏輯是不合理的,尤其是要控制權(quán)限時(shí)按功能封裝端口和適配器按組件封裝組織形式與封裝的區(qū)別如果沒有封裝和隱藏功能,采用任何架構(gòu)風(fēng)格都沒有區(qū)別七、軟件架構(gòu)目的終極目的:最大化程序員的生產(chǎn)力,最小化系統(tǒng)的總運(yùn)營成本細(xì)化目標(biāo):支撐軟件系統(tǒng)的全生命周期,讓系統(tǒng)便于理解、易于修改、方便維護(hù)、輕松部署方針盡可能長時(shí)間地保留盡可能多的可選項(xiàng)選項(xiàng)指的是無關(guān)緊要的細(xì)節(jié)設(shè)計(jì)選項(xiàng)例子
11、具體選用哪個(gè)存儲(chǔ)方式,或哪個(gè)數(shù)據(jù)庫使用哪種web服務(wù)使用哪種框架邊界越完善,開發(fā)和部署成本越高。所以不完全邊界能解決的,不要用完全邊界;低層次解耦能解決的,不要用高層次解耦內(nèi)容組件拆分切分水平分層按用例垂直切分重復(fù)性解耦模式源碼層次部署層次服務(wù)層次從上到下,開發(fā)、部署成本依次升高,如果低層次的解耦已經(jīng)滿足需要,不要進(jìn)行高層次的解耦組件排列(依賴)依賴關(guān)系與數(shù)據(jù)流控制流脫鉤,與組件所在層次掛鉤。所以組件的依賴是與組件的水平分層息息相關(guān)的分層業(yè)務(wù)實(shí)體用例接口適配器框架與驅(qū)動(dòng)程序測試層組件通信方式接口調(diào)用服務(wù)調(diào)用完全邊界調(diào)用雙方都聲明接口專用的輸入數(shù)據(jù)類型專用的返回?cái)?shù)據(jù)類型不完全邊界省掉最后一步:保留到源碼層次的解耦;聲明好接口,做好分割后,仍然放在一個(gè)組件中,等到時(shí)機(jī)成熟時(shí)再拆出來獨(dú)立編譯部署單向邊界:正常的切割,應(yīng)該使用兩個(gè)接口,兩個(gè)類各自使用對(duì)方的接口,而不是直接使用類,但是這樣的開發(fā)成本很大,所以,只實(shí)現(xiàn)一個(gè)接口,高層用接口調(diào)用低層,而低層直接使用高層的類門戶模式:控制權(quán)的間接轉(zhuǎn)移不用接口和實(shí)現(xiàn)去做,而是用門戶類去做,接口都不用聲明了軟件系統(tǒng)的生命周期開發(fā)不同團(tuán)隊(duì)負(fù)責(zé)的組件不交叉不使用大量復(fù)雜的腳手架部署減少組件數(shù)量,內(nèi)部組件外部組件結(jié)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 甘肅省金昌市(2024年-2025年小學(xué)六年級(jí)語文)統(tǒng)編版能力評(píng)測((上下)學(xué)期)試卷及答案
- 貴州盛華職業(yè)學(xué)院《公司法與商法(ACCA)》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴州農(nóng)業(yè)職業(yè)學(xué)院《軟裝設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- Unit 2 Morals and Virtues Reading for Writing 說課稿-2023-2024學(xué)年高中英語人教版(2019)必修第三冊(cè)
- DB21-T 4077-2024 梅花鹿養(yǎng)殖場防疫技術(shù)規(guī)范
- 中國船級(jí)社規(guī)范 液化天然氣燃料加注船舶規(guī)范 2023
- 貴州民用航空職業(yè)學(xué)院《建筑學(xué)專業(yè)導(dǎo)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴州警察學(xué)院《訓(xùn)練課》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴州交通職業(yè)技術(shù)學(xué)院《先秦諸子思想研究》2023-2024學(xué)年第一學(xué)期期末試卷
- Unit4 At the farm B let's talk (說課稿)-2023-2024學(xué)年人教PEP版英語四年級(jí)下冊(cè)
- 遼寧盤錦浩業(yè)化工“1.15”泄漏爆炸著火事故警示教育
- 供應(yīng)鏈案例亞馬遜歐洲公司分銷戰(zhàn)略課件
- 石化行業(yè)八大高風(fēng)險(xiǎn)作業(yè)安全規(guī)范培訓(xùn)課件
- 村老支書追悼詞
- DB3302T 1131-2022企業(yè)法律顧問服務(wù)基本規(guī)范
- 2022年自愿性認(rèn)證活動(dòng)獲證組織現(xiàn)場監(jiān)督檢查表、確認(rèn)書
- 中南大學(xué)年《高等數(shù)學(xué)上》期末考試試題及答案
- 付款通知確認(rèn)單
- 小龍蝦高密度養(yǎng)殖試驗(yàn)基地建設(shè)項(xiàng)目可行性研究報(bào)告
- 《橋梁工程計(jì)算書》word版
- 中考《紅星照耀中國》各篇章練習(xí)題及答案(1-12)
評(píng)論
0/150
提交評(píng)論