軟件詳細(xì)設(shè)計(jì)專題講座課件_第1頁
軟件詳細(xì)設(shè)計(jì)專題講座課件_第2頁
軟件詳細(xì)設(shè)計(jì)專題講座課件_第3頁
軟件詳細(xì)設(shè)計(jì)專題講座課件_第4頁
軟件詳細(xì)設(shè)計(jì)專題講座課件_第5頁
已閱讀5頁,還剩143頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

軟件詳細(xì)設(shè)計(jì)

講座主講人:軟件詳細(xì)設(shè)計(jì)

講座主講人:內(nèi)容第二部分:軟件設(shè)計(jì)第一部分:軟件架構(gòu)內(nèi)容第二部分:軟件設(shè)計(jì)第一部分:軟件架構(gòu)第一部分

軟件架構(gòu)內(nèi)容第一部分

軟件架構(gòu)內(nèi)容需求/架構(gòu)/設(shè)計(jì)關(guān)系需求/架構(gòu)/設(shè)計(jì)關(guān)系軟件架構(gòu)定義什么是架構(gòu)?如果你問五個(gè)不同的人,可能會(huì)得到五種不同的答案。很多人都試圖給“架構(gòu)”下定義,而這些定義本身卻很難統(tǒng)一。軟件架構(gòu)是一種無法以簡單的一維方式進(jìn)行說明的復(fù)雜實(shí)體。軟件架構(gòu)(softwarearchitecture)是一系列相關(guān)的架構(gòu)視圖,用于指導(dǎo)大型軟件系統(tǒng)各個(gè)方面的設(shè)計(jì)。多重軟件架構(gòu)視圖之所以必不可少,是因?yàn)楦黝愋腿藛T(用戶、開發(fā)人員、測試人員、維護(hù)人員、操作人員)需要從各自的角度理解和使用架構(gòu)。軟件架構(gòu)定義什么是架構(gòu)?如果你問五個(gè)不同的人,可能會(huì)得到五種軟件架構(gòu)的實(shí)際意義做正確的架構(gòu)正確的表達(dá)架構(gòu)讓別人能遵守架構(gòu)軟件架構(gòu)的實(shí)際意義做正確的架構(gòu)軟件架構(gòu)視圖單一的視圖無法完整的表達(dá)架構(gòu),因此需要具備完整的視圖集。軟件架構(gòu)視圖是從特定的視角出發(fā),專注于該視角系統(tǒng)的結(jié)構(gòu)、模塊劃分、基本組件職責(zé)和主要控制流。軟件架構(gòu)視圖的四要素:圖示化主要元素和元素之間的關(guān)系。具有明確的圖例、定義和說明元素。每個(gè)元素具備明確的接口和行為規(guī)范。設(shè)計(jì)的原理和設(shè)計(jì)決策信息。。軟件架構(gòu)視圖單一的視圖無法完整的表達(dá)架構(gòu),因此需要具備完整的常見軟件架構(gòu)視圖邏輯視圖開發(fā)視圖部署視圖進(jìn)程視圖場景視圖數(shù)據(jù)視圖實(shí)現(xiàn)視圖常見軟件架構(gòu)視圖邏輯視圖”4+1”模式邏輯視圖開發(fā)視圖進(jìn)程視圖部署視圖場景視圖”4+1”模式邏輯視圖開發(fā)視圖進(jìn)程視圖部署視圖場景視圖邏輯視圖面向?qū)ο螅嚎蛻?用戶/開發(fā)組織管理者。視角:系統(tǒng)的功能元素,以及它們的接口、職責(zé)、交互等。主要元素:系統(tǒng)、子系統(tǒng)、功能模塊、子功能模塊、接口用途:開發(fā)組織劃分,成本/進(jìn)度評估邏輯視圖面向?qū)ο螅嚎蛻?用戶/開發(fā)組織管理者。邏輯視圖樣例一系統(tǒng)框架圖邏輯視圖樣例一系統(tǒng)框架圖邏輯視圖樣例二軟件結(jié)構(gòu)圖邏輯視圖樣例二軟件結(jié)構(gòu)圖邏輯視圖樣例三前置子系統(tǒng)結(jié)構(gòu)圖邏輯視圖樣例三前置子系統(tǒng)結(jié)構(gòu)圖邏輯視圖樣例四監(jiān)控子系統(tǒng)結(jié)構(gòu)圖邏輯視圖樣例四監(jiān)控子系統(tǒng)結(jié)構(gòu)圖邏輯視圖樣例五防誤子系統(tǒng)結(jié)構(gòu)圖邏輯視圖樣例五防誤子系統(tǒng)結(jié)構(gòu)圖開發(fā)視圖面向?qū)ο螅洪_發(fā)相關(guān)人員/測試人員視角:系統(tǒng)如何開發(fā)實(shí)現(xiàn)主要元素:描述系統(tǒng)的層、分區(qū)、包、框架、系統(tǒng)通用服務(wù)、業(yè)務(wù)通用服務(wù)、類和接口、系統(tǒng)平臺和相關(guān)基礎(chǔ)框架用途:指導(dǎo)開發(fā)設(shè)計(jì)和開發(fā)實(shí)現(xiàn)開發(fā)視圖面向?qū)ο螅洪_發(fā)相關(guān)人員/測試人員開發(fā)視圖樣例一開發(fā)視圖樣例一開發(fā)視圖樣例二對象請求代理ORB開發(fā)視圖樣例二對象請求代理ORB開發(fā)視圖樣例三復(fù)制數(shù)據(jù)庫技術(shù)架構(gòu)開發(fā)視圖樣例三復(fù)制數(shù)據(jù)庫技術(shù)架構(gòu)開發(fā)視圖樣例四進(jìn)程和服務(wù)管理開發(fā)視圖樣例四進(jìn)程和服務(wù)管理開發(fā)視圖樣例五數(shù)據(jù)庫專用平臺開發(fā)視圖樣例五數(shù)據(jù)庫專用平臺開發(fā)視圖樣例六前置子模塊間關(guān)系開發(fā)視圖樣例六前置子模塊間關(guān)系部署視圖也稱物理視圖面向?qū)ο螅合到y(tǒng)集成商/系統(tǒng)運(yùn)維人員視角:系統(tǒng)邏輯組件到物理節(jié)點(diǎn)的物理部署、節(jié)點(diǎn)之間的物理網(wǎng)絡(luò)配置主要元素:物理節(jié)點(diǎn)以及節(jié)點(diǎn)的通訊用途:指導(dǎo)系統(tǒng)采購以及網(wǎng)絡(luò)、節(jié)點(diǎn)布局部署視圖也稱物理視圖部署視圖樣例一部署視圖樣例一部署視圖樣例二部署視圖樣例二部署視圖樣例三部署視圖樣例三部署視圖樣例四部署視圖樣例四進(jìn)程視圖面向?qū)ο螅盒阅軆?yōu)化/開發(fā)相關(guān)人員視角:系統(tǒng)運(yùn)行時(shí)線程/進(jìn)程的情況主要元素:系統(tǒng)進(jìn)程/線程以及處理隊(duì)列等用途:指導(dǎo)系統(tǒng)進(jìn)程/線程分布進(jìn)程視圖面向?qū)ο螅盒阅軆?yōu)化/開發(fā)相關(guān)人員進(jìn)程視圖樣例進(jìn)程視圖樣例場景視圖也稱用例視圖面向?qū)ο螅涸O(shè)計(jì)和開發(fā)人員視角:囊括了架構(gòu)上最重要的場景(最典型或最有風(fēng)險(xiǎn))及其非功能性需求,通過這些場景的實(shí)現(xiàn),闡明了架構(gòu)的廣度或眾多架構(gòu)元素的運(yùn)行方式。場景視圖也稱用例視圖場景視圖樣例一場景視圖樣例一場景視圖樣例二場景視圖樣例二數(shù)據(jù)視圖面向?qū)ο螅簲?shù)據(jù)架構(gòu)師/開發(fā)相關(guān)人員視角:系統(tǒng)數(shù)據(jù)模型以及數(shù)據(jù)存儲/存取方式主要元素:系統(tǒng)的核心實(shí)體模型以及相應(yīng)的數(shù)據(jù)存儲模型和存儲方式系統(tǒng)的數(shù)據(jù)存儲相關(guān)策略系統(tǒng)核心的數(shù)據(jù)流數(shù)據(jù)視圖面向?qū)ο螅簲?shù)據(jù)架構(gòu)師/開發(fā)相關(guān)人員數(shù)據(jù)視圖樣例一數(shù)據(jù)視圖樣例一數(shù)據(jù)視圖樣例二RAC模式數(shù)據(jù)視圖樣例二RAC模式數(shù)據(jù)視圖樣例三HA模式數(shù)據(jù)視圖樣例三HA模式數(shù)據(jù)視圖樣例四DataGuard模式數(shù)據(jù)視圖樣例四DataGuard模式總結(jié)架構(gòu)設(shè)計(jì)以多視圖的模式呈現(xiàn)多視圖的目的是為了指導(dǎo)不同的團(tuán)隊(duì)思維和實(shí)現(xiàn)多視圖是分而治之的多視圖可以并行多視圖可以組合總結(jié)架構(gòu)設(shè)計(jì)以多視圖的模式呈現(xiàn)第二部分

軟件設(shè)計(jì)內(nèi)容第二部分

軟件設(shè)計(jì)內(nèi)容內(nèi)容軟件設(shè)計(jì)金字塔軟件設(shè)計(jì)的價(jià)值觀優(yōu)秀設(shè)計(jì)遵循的原則破窗效應(yīng)和技術(shù)債務(wù)代碼的壞味道重構(gòu)技術(shù)內(nèi)容軟件設(shè)計(jì)金字塔設(shè)計(jì)金字塔設(shè)計(jì)金字塔關(guān)注軟件維護(hù)成本軟件系統(tǒng)維護(hù)工作量所占比重超乎想象?。?!COST(total)=COST(develop)+COST(maintain)COST(maintain)=Cost(understand)+(理解)Cost(change)+(變更)Cost(test)(測試)Cost(depoly)(現(xiàn)場部署)關(guān)注軟件維護(hù)成本軟件系統(tǒng)維護(hù)工作量所占比重超乎想象?。?!什么是好的設(shè)計(jì)?關(guān)注軟件的可維護(hù)性和可復(fù)用性區(qū)分功能需求和非功能需求一個(gè)好的設(shè)計(jì)應(yīng)該有如下性質(zhì):可擴(kuò)展性、靈活性、可插入性可擴(kuò)展性:新的功能可以很容易的加入到系統(tǒng)中靈活性:可以容許代碼修改平穩(wěn),而不會(huì)波及到很多其他模塊可插入性:可以很容易的將一個(gè)類抽出去,同時(shí)將另一個(gè)有同樣接口的類加入進(jìn)來什么是好的設(shè)計(jì)?關(guān)注軟件的可維護(hù)性和可復(fù)用性軟件的可維護(hù)性大家有沒有注意到,原來我們自認(rèn)為是很漂亮的設(shè)計(jì)隨著時(shí)間的推移慢慢“發(fā)出腐化的臭味”,代碼也會(huì)慢慢變成由一堆糾纏不清的函數(shù)和變量攪和在一起的“代碼漿糊”,為什么?是什么原因?qū)е碌哪兀?-都是客戶和老板的錯(cuò)!客戶不斷的改變需求。如果用戶的要求僅限于他們最初所聲明的,我們的設(shè)計(jì)就沒有問題,錯(cuò)就錯(cuò)在用戶改變了他們的需求。老板沒有給我們充足的時(shí)間,進(jìn)行充分的分析,使我們沒有時(shí)間設(shè)計(jì)出一個(gè)完美的結(jié)構(gòu)。軟件的可維護(hù)性大家有沒有注意到,原來我們自認(rèn)為是很漂亮的設(shè)計(jì)軟件的變更軟件是應(yīng)該不斷變更的。我們認(rèn)為,真實(shí)世界中使用的程序必須進(jìn)行變更,否則它在環(huán)境中的作用就會(huì)原來越小。軟件復(fù)雜增加性法則:隨著一個(gè)不斷演進(jìn)程序的變更,他的結(jié)構(gòu)會(huì)變得越來越復(fù)雜。軟件是應(yīng)該不斷變更的,因?yàn)樾枨笫遣粩嘧兏?。難道變化的需求一定會(huì)導(dǎo)致系統(tǒng)“腐爛”嗎?為什么一個(gè)系統(tǒng)的設(shè)計(jì)不可以為以后的變化留出足夠的空間?如何實(shí)現(xiàn)一個(gè)優(yōu)秀的設(shè)計(jì)?軟件的變更軟件是應(yīng)該不斷變更的。我們認(rèn)為,真實(shí)世界中使用的程優(yōu)秀設(shè)計(jì)原則優(yōu)秀設(shè)計(jì)第一法則:開閉原則優(yōu)秀設(shè)計(jì)第二法則:重構(gòu)優(yōu)秀設(shè)計(jì)原則優(yōu)秀設(shè)計(jì)第一法則:開閉原則開閉原則開放-封閉原則(OCP)軟件的組成實(shí)體(類、模塊、函數(shù)等等)應(yīng)該是可以擴(kuò)展的,但是是不可修改的。即軟件實(shí)體可以通過增加新代碼實(shí)現(xiàn)擴(kuò)展,但是不能修改已有代碼。任何一個(gè)系統(tǒng)在其生命周期內(nèi)都會(huì)發(fā)生變化。如果我們希望開發(fā)出的系統(tǒng)不會(huì)在第一版本后就被拋棄,我們就必須牢記這一點(diǎn)。開閉原則開放-封閉原則(OCP)發(fā)現(xiàn)變化并將其封裝優(yōu)秀設(shè)計(jì)精髓就是封裝變化,就是將變化進(jìn)行抽象,封裝變化,這樣才能保證軟件的可擴(kuò)展性以及模塊間的松耦合。一種可變性不應(yīng)當(dāng)散落在代碼的很多角落里,而應(yīng)當(dāng)被封裝到一個(gè)對象里。一種可變性不應(yīng)當(dāng)與另一種可變性混合在一起。發(fā)現(xiàn)變化并將其封裝優(yōu)秀設(shè)計(jì)精髓就是封裝變化,就是將變化進(jìn)行抽共性和可變性分析(CVA)找到變化的地點(diǎn),稱為“共性分析”然后找出如何變化,稱為“變性分析”CVA分析步驟先尋找共性;從這些共性創(chuàng)建抽象;從共性的變化派生可變性實(shí)現(xiàn);看共性與其他共性之間的關(guān)系如何;共性和可變性分析(CVA)找到變化的地點(diǎn),稱為“共性分析”CVA樣例主板和插槽CVA樣例主板和插槽開閉原則的代價(jià)100%開閉原則的代價(jià):遵循開閉原則代價(jià)昂貴,正確的抽象(尋找共性并抽象)需要時(shí)間和精力,需求的不可預(yù)測性,給抽象增加了復(fù)雜度。對于應(yīng)用程序中的每個(gè)部分都肆意的進(jìn)行抽象同樣不是一個(gè)好主意。應(yīng)該對程序中呈現(xiàn)頻繁變化的那些部分進(jìn)行抽象。拒絕不成熟的抽象和抽象本身一樣重要。開閉原則的代價(jià)100%開閉原則的代價(jià):亡羊補(bǔ)牢-重構(gòu)面對需求的不可預(yù)測性,設(shè)計(jì)師根據(jù)經(jīng)驗(yàn)猜測程序可能遭受的變化,如果猜測正確,獲得成功,猜測錯(cuò)誤,遭受失敗。隨著需求的不斷變化,軟件的不斷變更,“設(shè)計(jì)腐化”和“代碼漿糊”的現(xiàn)象慢慢呈現(xiàn)出來。為了解決這個(gè)問題,我們需要應(yīng)用優(yōu)秀設(shè)計(jì)的第二法則:優(yōu)秀設(shè)計(jì)需要不斷重構(gòu)。重構(gòu)到優(yōu)秀設(shè)計(jì)。亡羊補(bǔ)牢-重構(gòu)面對需求的不可預(yù)測性,設(shè)計(jì)師根據(jù)經(jīng)驗(yàn)猜測程序可拙劣設(shè)計(jì)的影響如果設(shè)計(jì)已經(jīng)出現(xiàn)腐化,代碼漿糊已經(jīng)開始產(chǎn)生,我們最初的設(shè)計(jì)已經(jīng)成為拙劣的設(shè)計(jì)了,我們不去重構(gòu)的話,將會(huì)產(chǎn)生“破窗效應(yīng)”和“技術(shù)債務(wù)”問題。拙劣設(shè)計(jì)的影響如果設(shè)計(jì)已經(jīng)出現(xiàn)腐化,代碼漿糊已經(jīng)開始產(chǎn)生,我破窗效應(yīng)破窗理論破窗效應(yīng)(BreakPaneLaw)

沒修復(fù)的破窗,導(dǎo)致更多的窗戶被打破破窗效應(yīng)破窗理論破窗效應(yīng)(BreakPaneLaw)

破窗效應(yīng)破窗效應(yīng):沒修復(fù)的破窗,導(dǎo)致更多的窗戶被打破所謂“破窗效應(yīng)”,是關(guān)于環(huán)境對人們心理造成暗示性或誘導(dǎo)性影響的一種認(rèn)識?!捌拼靶?yīng)”理論是指:一個(gè)房子如果窗戶破了,沒有人去修補(bǔ),隔不久,其它的窗戶也會(huì)莫名其妙的被人打破;一面墻,如果出現(xiàn)一些涂鴉沒有清洗掉,很快的,墻上就布滿了亂七八糟,不堪入目的東西。一個(gè)很干凈的地方,人們會(huì)不好意思丟垃圾,但是一旦地上有垃圾出現(xiàn)之后,人們就會(huì)毫不猶疑的拋,絲毫不覺羞愧。這真是很奇怪的現(xiàn)象破窗效應(yīng)破窗效應(yīng):沒修復(fù)的破窗,導(dǎo)致更多的窗戶被打破技術(shù)債務(wù)“出來混,遲早要還的”技術(shù)債務(wù)“出來混,遲早要還的”技術(shù)債務(wù)(TechnicalDebt)開發(fā)團(tuán)隊(duì)在設(shè)計(jì)或架構(gòu)選型時(shí)從短期效應(yīng)的角度選擇了一個(gè)易于實(shí)現(xiàn)的方案,但從長遠(yuǎn)來看,這種方案會(huì)帶來更消極的影響,亦即開發(fā)團(tuán)隊(duì)所欠的債務(wù)技術(shù)債務(wù)類似于金融債務(wù),它也會(huì)產(chǎn)生利息,這里的利息其實(shí)就是指由于魯莽的設(shè)計(jì)決策導(dǎo)致需要在未來的開發(fā)中付出更多努力的后果。我們可以選擇繼續(xù)支付利息,也可以通過重構(gòu)之前魯莽的設(shè)計(jì)來將本金一次付清。雖然一次性付清本金需要代價(jià),但卻可以降低未來的利息技術(shù)債務(wù)(TechnicalDebt)開發(fā)團(tuán)隊(duì)在設(shè)計(jì)或架技術(shù)債務(wù)技術(shù)債務(wù)的種類無意的——由于經(jīng)驗(yàn)的缺乏導(dǎo)致初級開發(fā)者編寫了質(zhì)量低劣的代碼。有意的——團(tuán)隊(duì)根據(jù)當(dāng)前而非未來進(jìn)行設(shè)計(jì)選型,這種方式可能很快就能解決當(dāng)前的問題,但卻很拙劣技術(shù)債務(wù)技術(shù)債務(wù)的種類技術(shù)債務(wù)很多敏捷團(tuán)隊(duì)都能認(rèn)識到技術(shù)債務(wù)相關(guān)的罪狀。就跟財(cái)務(wù)上的負(fù)債一樣,技術(shù)債務(wù)也會(huì)產(chǎn)生利息。要支付這些利息,就要付出額外努力維護(hù)和改進(jìn)正在“腐化”或基礎(chǔ)并不牢固的軟件。諸多敏捷人士推薦盡早償還技術(shù)債務(wù)。然而,大多數(shù)敏捷團(tuán)隊(duì)無法成功以金錢的方式計(jì)算技術(shù)債務(wù),因此無法得到有價(jià)值的深入理解和思考技術(shù)債務(wù)很多敏捷團(tuán)隊(duì)都能認(rèn)識到技術(shù)債務(wù)相關(guān)的罪狀。就跟財(cái)務(wù)上技術(shù)債務(wù)技術(shù)債務(wù)代碼的壞味道產(chǎn)生破窗效應(yīng)和技術(shù)債務(wù)的一個(gè)原因就是代碼產(chǎn)生了壞味道。代碼壞味道是指在代碼之中潛在問題的警示信號,并非所有的壞味道所指示的確實(shí)是問題,但大部分壞味道需要加以詳細(xì)查看,并做出相應(yīng)決定。代碼壞味道是需要重構(gòu)的癥狀?;蛘呤菨撛诘膯栴},或者是缺陷。代碼的壞味道重點(diǎn)在代碼層次,與拙劣的設(shè)計(jì)相比是低的層次。代碼的壞味道產(chǎn)生破窗效應(yīng)和技術(shù)債務(wù)的一個(gè)原因就是代碼產(chǎn)生了壞偉大程序員的標(biāo)準(zhǔn)-避免壞味道“我不是什么偉大的程序員,我只是一個(gè)有著很多好習(xí)慣的程序員”。任何一個(gè)傻瓜都能寫出機(jī)器能讀懂的代碼,好的程序員應(yīng)該寫出人能懂的代碼。我們不是要告訴別人什么才是好的程序的標(biāo)準(zhǔn),而應(yīng)該告訴別人不應(yīng)該出現(xiàn)的錯(cuò)誤。偉大程序員的標(biāo)準(zhǔn)-避免壞味道“我不是什么偉大的程序員,我只是22種常見的代碼的壞味道重復(fù)代碼過長函數(shù)過大類過長參數(shù)列發(fā)散式變化散彈式修改依戀情結(jié)22種常見的代碼的壞味道重復(fù)代碼22種常見的代碼的壞味道數(shù)據(jù)泥團(tuán)基本類型迷戀分支語句(switch)平等繼承體系冗贅類夸夸其談未來性令人迷惑的暫時(shí)值域22種常見的代碼的壞味道數(shù)據(jù)泥團(tuán)22種常見的代碼的壞味道過度耦合的消息鏈中間轉(zhuǎn)手人狎昵關(guān)系異曲同工的類不完美的程序庫類純粹的數(shù)據(jù)類被拒絕的遺贈(zèng)過多的注釋22種常見的代碼的壞味道過度耦合的消息鏈代碼靜態(tài)分析代碼靜態(tài)分析工具是一種軟件,可以利用它對程序的源代碼進(jìn)行分析,自動(dòng)測試應(yīng)用系統(tǒng)的很多方面。在軟件測試中,靜態(tài)分析工具并不執(zhí)行所測試的程序,只是掃描所測試程序的正文,對程序的源代碼進(jìn)行分析,它類似于編譯程序中的詞法分析和語法分析,但工作量遠(yuǎn)不止于此。使用代碼靜態(tài)分析工具可以發(fā)現(xiàn)一些代碼壞味道。但不會(huì)解決代碼的壞味道。代碼靜態(tài)分析代碼靜態(tài)分析工具是一種軟件,可以利用它對程序的源壞味道的解決之道-重構(gòu)代碼的壞味道-設(shè)計(jì)師必知代碼壞味道-壞味道的名稱癥狀-有助于找出問題的線索原因-對問題如何會(huì)發(fā)生的說明采取的措施-可能的重構(gòu)收益-在那些方面有所改善不適應(yīng)情況-在哪些情況下不適用壞味道的解決之道-重構(gòu)代碼的壞味道-設(shè)計(jì)師必知重構(gòu)的定義名詞定義:對軟件內(nèi)部結(jié)構(gòu)的一種調(diào)整,目的是在不改變功能的前提下,提高其可理解性,降低其修改成本。動(dòng)詞定義:使用一系列重構(gòu)準(zhǔn)則,在不改變軟件功能的前提下,調(diào)整其結(jié)構(gòu)。重構(gòu)的3次法則(事不過三)第一次做某事時(shí)盡管去做;第二次做類似的事情時(shí)會(huì)產(chǎn)生反感,但無論如何還是做了;第三次再做類似的事,你就應(yīng)該重構(gòu)。重構(gòu)的定義名詞定義:對軟件內(nèi)部結(jié)構(gòu)的一種調(diào)整,目的是在不改變壞味道與重構(gòu)重復(fù)代碼:在一個(gè)以上的地方看到相同的程序結(jié)構(gòu)同一個(gè)class內(nèi)的兩個(gè)函數(shù)含有相同表達(dá)式兩個(gè)互為兄弟的subclass內(nèi)含有相同的表達(dá)式一般重構(gòu)方法:提煉方法、提取類、方法上移、替換算法、鏈構(gòu)造方法。壞味道與重構(gòu)重復(fù)代碼:在一個(gè)以上的地方看到相同的程序結(jié)構(gòu)壞味道與重構(gòu)發(fā)散式變化:軟件應(yīng)該能夠更容易的被修改。一旦需要修改,我們希望能夠集中到系統(tǒng)的某一點(diǎn),只在此處做修改。散彈式修改:如果每遇到某種變化,你必須在許多不同的class內(nèi)作出許多小修改以響應(yīng)之,即需要修改的代碼四處散布,不但很難找到,而且容易遺漏。

一般重構(gòu)方法:提取類、轉(zhuǎn)移方法、轉(zhuǎn)移字段。壞味道與重構(gòu)發(fā)散式變化:軟件應(yīng)該能夠更容易的被修改。一旦需要壞味道與重構(gòu)過多的注釋:代碼中常常看到一段很長的注釋,然后發(fā)現(xiàn),這些注釋存在的原因是因?yàn)榇a很糟糕。加入注釋的目的是讓大家能夠知道我的代碼是干什么的。如果我們找到這些代碼的壞味道,并使用重構(gòu)的方法把壞味道清除掉,就會(huì)發(fā)現(xiàn)注釋已經(jīng)變得多余了。壞味道與重構(gòu)過多的注釋:代碼中常??吹揭欢魏荛L的注釋,然后發(fā)壞味道與重構(gòu)不同的壞味道,其重構(gòu)方法方法不盡相同。壞味道還可以使用模式的方法進(jìn)行重構(gòu)。在此我們不做具體說明。壞味道與重構(gòu)不同的壞味道,其重構(gòu)方法方法不盡相同。壞味道還可總結(jié)我們應(yīng)該了解設(shè)計(jì)的金字塔。我們應(yīng)該明確自己設(shè)計(jì)的價(jià)值觀。是注重可維護(hù)性還是更注重性能。維護(hù)成本的計(jì)算。我們應(yīng)該知道優(yōu)秀設(shè)計(jì)的原則。我們應(yīng)該知道怎樣才是一個(gè)好的程序員。我們應(yīng)該知道破窗效應(yīng)、技術(shù)債務(wù)。我們應(yīng)該知道代碼中那些常見的壞味道。我們應(yīng)該知道如何清除代碼中的壞味道我們應(yīng)該知道如何重構(gòu)總結(jié)我們應(yīng)該了解設(shè)計(jì)的金字塔。期望我們希望大家通過不同的架構(gòu)視圖為系統(tǒng)做出正確的架構(gòu)設(shè)計(jì)。我們希望大家在設(shè)計(jì)時(shí)能夠樹立正確的設(shè)計(jì)價(jià)值觀。我們希望大家都能做出優(yōu)秀的設(shè)計(jì)。我們希望少出現(xiàn)或不出現(xiàn)破窗效應(yīng)和技術(shù)債務(wù)。我們希望系統(tǒng)中的代碼少出現(xiàn)或不出現(xiàn)壞味道。即使出現(xiàn),我們也能通過重構(gòu)將之清除。我們希望大家都能成為好的設(shè)計(jì)師和程序員。期望我們希望大家通過不同的架構(gòu)視圖為系統(tǒng)做出正確的架構(gòu)設(shè)計(jì)。軟件詳細(xì)設(shè)計(jì)

講座主講人:軟件詳細(xì)設(shè)計(jì)

講座主講人:內(nèi)容第二部分:軟件設(shè)計(jì)第一部分:軟件架構(gòu)內(nèi)容第二部分:軟件設(shè)計(jì)第一部分:軟件架構(gòu)第一部分

軟件架構(gòu)內(nèi)容第一部分

軟件架構(gòu)內(nèi)容需求/架構(gòu)/設(shè)計(jì)關(guān)系需求/架構(gòu)/設(shè)計(jì)關(guān)系軟件架構(gòu)定義什么是架構(gòu)?如果你問五個(gè)不同的人,可能會(huì)得到五種不同的答案。很多人都試圖給“架構(gòu)”下定義,而這些定義本身卻很難統(tǒng)一。軟件架構(gòu)是一種無法以簡單的一維方式進(jìn)行說明的復(fù)雜實(shí)體。軟件架構(gòu)(softwarearchitecture)是一系列相關(guān)的架構(gòu)視圖,用于指導(dǎo)大型軟件系統(tǒng)各個(gè)方面的設(shè)計(jì)。多重軟件架構(gòu)視圖之所以必不可少,是因?yàn)楦黝愋腿藛T(用戶、開發(fā)人員、測試人員、維護(hù)人員、操作人員)需要從各自的角度理解和使用架構(gòu)。軟件架構(gòu)定義什么是架構(gòu)?如果你問五個(gè)不同的人,可能會(huì)得到五種軟件架構(gòu)的實(shí)際意義做正確的架構(gòu)正確的表達(dá)架構(gòu)讓別人能遵守架構(gòu)軟件架構(gòu)的實(shí)際意義做正確的架構(gòu)軟件架構(gòu)視圖單一的視圖無法完整的表達(dá)架構(gòu),因此需要具備完整的視圖集。軟件架構(gòu)視圖是從特定的視角出發(fā),專注于該視角系統(tǒng)的結(jié)構(gòu)、模塊劃分、基本組件職責(zé)和主要控制流。軟件架構(gòu)視圖的四要素:圖示化主要元素和元素之間的關(guān)系。具有明確的圖例、定義和說明元素。每個(gè)元素具備明確的接口和行為規(guī)范。設(shè)計(jì)的原理和設(shè)計(jì)決策信息。。軟件架構(gòu)視圖單一的視圖無法完整的表達(dá)架構(gòu),因此需要具備完整的常見軟件架構(gòu)視圖邏輯視圖開發(fā)視圖部署視圖進(jìn)程視圖場景視圖數(shù)據(jù)視圖實(shí)現(xiàn)視圖常見軟件架構(gòu)視圖邏輯視圖”4+1”模式邏輯視圖開發(fā)視圖進(jìn)程視圖部署視圖場景視圖”4+1”模式邏輯視圖開發(fā)視圖進(jìn)程視圖部署視圖場景視圖邏輯視圖面向?qū)ο螅嚎蛻?用戶/開發(fā)組織管理者。視角:系統(tǒng)的功能元素,以及它們的接口、職責(zé)、交互等。主要元素:系統(tǒng)、子系統(tǒng)、功能模塊、子功能模塊、接口用途:開發(fā)組織劃分,成本/進(jìn)度評估邏輯視圖面向?qū)ο螅嚎蛻?用戶/開發(fā)組織管理者。邏輯視圖樣例一系統(tǒng)框架圖邏輯視圖樣例一系統(tǒng)框架圖邏輯視圖樣例二軟件結(jié)構(gòu)圖邏輯視圖樣例二軟件結(jié)構(gòu)圖邏輯視圖樣例三前置子系統(tǒng)結(jié)構(gòu)圖邏輯視圖樣例三前置子系統(tǒng)結(jié)構(gòu)圖邏輯視圖樣例四監(jiān)控子系統(tǒng)結(jié)構(gòu)圖邏輯視圖樣例四監(jiān)控子系統(tǒng)結(jié)構(gòu)圖邏輯視圖樣例五防誤子系統(tǒng)結(jié)構(gòu)圖邏輯視圖樣例五防誤子系統(tǒng)結(jié)構(gòu)圖開發(fā)視圖面向?qū)ο螅洪_發(fā)相關(guān)人員/測試人員視角:系統(tǒng)如何開發(fā)實(shí)現(xiàn)主要元素:描述系統(tǒng)的層、分區(qū)、包、框架、系統(tǒng)通用服務(wù)、業(yè)務(wù)通用服務(wù)、類和接口、系統(tǒng)平臺和相關(guān)基礎(chǔ)框架用途:指導(dǎo)開發(fā)設(shè)計(jì)和開發(fā)實(shí)現(xiàn)開發(fā)視圖面向?qū)ο螅洪_發(fā)相關(guān)人員/測試人員開發(fā)視圖樣例一開發(fā)視圖樣例一開發(fā)視圖樣例二對象請求代理ORB開發(fā)視圖樣例二對象請求代理ORB開發(fā)視圖樣例三復(fù)制數(shù)據(jù)庫技術(shù)架構(gòu)開發(fā)視圖樣例三復(fù)制數(shù)據(jù)庫技術(shù)架構(gòu)開發(fā)視圖樣例四進(jìn)程和服務(wù)管理開發(fā)視圖樣例四進(jìn)程和服務(wù)管理開發(fā)視圖樣例五數(shù)據(jù)庫專用平臺開發(fā)視圖樣例五數(shù)據(jù)庫專用平臺開發(fā)視圖樣例六前置子模塊間關(guān)系開發(fā)視圖樣例六前置子模塊間關(guān)系部署視圖也稱物理視圖面向?qū)ο螅合到y(tǒng)集成商/系統(tǒng)運(yùn)維人員視角:系統(tǒng)邏輯組件到物理節(jié)點(diǎn)的物理部署、節(jié)點(diǎn)之間的物理網(wǎng)絡(luò)配置主要元素:物理節(jié)點(diǎn)以及節(jié)點(diǎn)的通訊用途:指導(dǎo)系統(tǒng)采購以及網(wǎng)絡(luò)、節(jié)點(diǎn)布局部署視圖也稱物理視圖部署視圖樣例一部署視圖樣例一部署視圖樣例二部署視圖樣例二部署視圖樣例三部署視圖樣例三部署視圖樣例四部署視圖樣例四進(jìn)程視圖面向?qū)ο螅盒阅軆?yōu)化/開發(fā)相關(guān)人員視角:系統(tǒng)運(yùn)行時(shí)線程/進(jìn)程的情況主要元素:系統(tǒng)進(jìn)程/線程以及處理隊(duì)列等用途:指導(dǎo)系統(tǒng)進(jìn)程/線程分布進(jìn)程視圖面向?qū)ο螅盒阅軆?yōu)化/開發(fā)相關(guān)人員進(jìn)程視圖樣例進(jìn)程視圖樣例場景視圖也稱用例視圖面向?qū)ο螅涸O(shè)計(jì)和開發(fā)人員視角:囊括了架構(gòu)上最重要的場景(最典型或最有風(fēng)險(xiǎn))及其非功能性需求,通過這些場景的實(shí)現(xiàn),闡明了架構(gòu)的廣度或眾多架構(gòu)元素的運(yùn)行方式。場景視圖也稱用例視圖場景視圖樣例一場景視圖樣例一場景視圖樣例二場景視圖樣例二數(shù)據(jù)視圖面向?qū)ο螅簲?shù)據(jù)架構(gòu)師/開發(fā)相關(guān)人員視角:系統(tǒng)數(shù)據(jù)模型以及數(shù)據(jù)存儲/存取方式主要元素:系統(tǒng)的核心實(shí)體模型以及相應(yīng)的數(shù)據(jù)存儲模型和存儲方式系統(tǒng)的數(shù)據(jù)存儲相關(guān)策略系統(tǒng)核心的數(shù)據(jù)流數(shù)據(jù)視圖面向?qū)ο螅簲?shù)據(jù)架構(gòu)師/開發(fā)相關(guān)人員數(shù)據(jù)視圖樣例一數(shù)據(jù)視圖樣例一數(shù)據(jù)視圖樣例二RAC模式數(shù)據(jù)視圖樣例二RAC模式數(shù)據(jù)視圖樣例三HA模式數(shù)據(jù)視圖樣例三HA模式數(shù)據(jù)視圖樣例四DataGuard模式數(shù)據(jù)視圖樣例四DataGuard模式總結(jié)架構(gòu)設(shè)計(jì)以多視圖的模式呈現(xiàn)多視圖的目的是為了指導(dǎo)不同的團(tuán)隊(duì)思維和實(shí)現(xiàn)多視圖是分而治之的多視圖可以并行多視圖可以組合總結(jié)架構(gòu)設(shè)計(jì)以多視圖的模式呈現(xiàn)第二部分

軟件設(shè)計(jì)內(nèi)容第二部分

軟件設(shè)計(jì)內(nèi)容內(nèi)容軟件設(shè)計(jì)金字塔軟件設(shè)計(jì)的價(jià)值觀優(yōu)秀設(shè)計(jì)遵循的原則破窗效應(yīng)和技術(shù)債務(wù)代碼的壞味道重構(gòu)技術(shù)內(nèi)容軟件設(shè)計(jì)金字塔設(shè)計(jì)金字塔設(shè)計(jì)金字塔關(guān)注軟件維護(hù)成本軟件系統(tǒng)維護(hù)工作量所占比重超乎想象?。?!COST(total)=COST(develop)+COST(maintain)COST(maintain)=Cost(understand)+(理解)Cost(change)+(變更)Cost(test)(測試)Cost(depoly)(現(xiàn)場部署)關(guān)注軟件維護(hù)成本軟件系統(tǒng)維護(hù)工作量所占比重超乎想象?。。∈裁词呛玫脑O(shè)計(jì)?關(guān)注軟件的可維護(hù)性和可復(fù)用性區(qū)分功能需求和非功能需求一個(gè)好的設(shè)計(jì)應(yīng)該有如下性質(zhì):可擴(kuò)展性、靈活性、可插入性可擴(kuò)展性:新的功能可以很容易的加入到系統(tǒng)中靈活性:可以容許代碼修改平穩(wěn),而不會(huì)波及到很多其他模塊可插入性:可以很容易的將一個(gè)類抽出去,同時(shí)將另一個(gè)有同樣接口的類加入進(jìn)來什么是好的設(shè)計(jì)?關(guān)注軟件的可維護(hù)性和可復(fù)用性軟件的可維護(hù)性大家有沒有注意到,原來我們自認(rèn)為是很漂亮的設(shè)計(jì)隨著時(shí)間的推移慢慢“發(fā)出腐化的臭味”,代碼也會(huì)慢慢變成由一堆糾纏不清的函數(shù)和變量攪和在一起的“代碼漿糊”,為什么?是什么原因?qū)е碌哪兀?-都是客戶和老板的錯(cuò)!客戶不斷的改變需求。如果用戶的要求僅限于他們最初所聲明的,我們的設(shè)計(jì)就沒有問題,錯(cuò)就錯(cuò)在用戶改變了他們的需求。老板沒有給我們充足的時(shí)間,進(jìn)行充分的分析,使我們沒有時(shí)間設(shè)計(jì)出一個(gè)完美的結(jié)構(gòu)。軟件的可維護(hù)性大家有沒有注意到,原來我們自認(rèn)為是很漂亮的設(shè)計(jì)軟件的變更軟件是應(yīng)該不斷變更的。我們認(rèn)為,真實(shí)世界中使用的程序必須進(jìn)行變更,否則它在環(huán)境中的作用就會(huì)原來越小。軟件復(fù)雜增加性法則:隨著一個(gè)不斷演進(jìn)程序的變更,他的結(jié)構(gòu)會(huì)變得越來越復(fù)雜。軟件是應(yīng)該不斷變更的,因?yàn)樾枨笫遣粩嘧兏?。難道變化的需求一定會(huì)導(dǎo)致系統(tǒng)“腐爛”嗎?為什么一個(gè)系統(tǒng)的設(shè)計(jì)不可以為以后的變化留出足夠的空間?如何實(shí)現(xiàn)一個(gè)優(yōu)秀的設(shè)計(jì)?軟件的變更軟件是應(yīng)該不斷變更的。我們認(rèn)為,真實(shí)世界中使用的程優(yōu)秀設(shè)計(jì)原則優(yōu)秀設(shè)計(jì)第一法則:開閉原則優(yōu)秀設(shè)計(jì)第二法則:重構(gòu)優(yōu)秀設(shè)計(jì)原則優(yōu)秀設(shè)計(jì)第一法則:開閉原則開閉原則開放-封閉原則(OCP)軟件的組成實(shí)體(類、模塊、函數(shù)等等)應(yīng)該是可以擴(kuò)展的,但是是不可修改的。即軟件實(shí)體可以通過增加新代碼實(shí)現(xiàn)擴(kuò)展,但是不能修改已有代碼。任何一個(gè)系統(tǒng)在其生命周期內(nèi)都會(huì)發(fā)生變化。如果我們希望開發(fā)出的系統(tǒng)不會(huì)在第一版本后就被拋棄,我們就必須牢記這一點(diǎn)。開閉原則開放-封閉原則(OCP)發(fā)現(xiàn)變化并將其封裝優(yōu)秀設(shè)計(jì)精髓就是封裝變化,就是將變化進(jìn)行抽象,封裝變化,這樣才能保證軟件的可擴(kuò)展性以及模塊間的松耦合。一種可變性不應(yīng)當(dāng)散落在代碼的很多角落里,而應(yīng)當(dāng)被封裝到一個(gè)對象里。一種可變性不應(yīng)當(dāng)與另一種可變性混合在一起。發(fā)現(xiàn)變化并將其封裝優(yōu)秀設(shè)計(jì)精髓就是封裝變化,就是將變化進(jìn)行抽共性和可變性分析(CVA)找到變化的地點(diǎn),稱為“共性分析”然后找出如何變化,稱為“變性分析”CVA分析步驟先尋找共性;從這些共性創(chuàng)建抽象;從共性的變化派生可變性實(shí)現(xiàn);看共性與其他共性之間的關(guān)系如何;共性和可變性分析(CVA)找到變化的地點(diǎn),稱為“共性分析”CVA樣例主板和插槽CVA樣例主板和插槽開閉原則的代價(jià)100%開閉原則的代價(jià):遵循開閉原則代價(jià)昂貴,正確的抽象(尋找共性并抽象)需要時(shí)間和精力,需求的不可預(yù)測性,給抽象增加了復(fù)雜度。對于應(yīng)用程序中的每個(gè)部分都肆意的進(jìn)行抽象同樣不是一個(gè)好主意。應(yīng)該對程序中呈現(xiàn)頻繁變化的那些部分進(jìn)行抽象。拒絕不成熟的抽象和抽象本身一樣重要。開閉原則的代價(jià)100%開閉原則的代價(jià):亡羊補(bǔ)牢-重構(gòu)面對需求的不可預(yù)測性,設(shè)計(jì)師根據(jù)經(jīng)驗(yàn)猜測程序可能遭受的變化,如果猜測正確,獲得成功,猜測錯(cuò)誤,遭受失敗。隨著需求的不斷變化,軟件的不斷變更,“設(shè)計(jì)腐化”和“代碼漿糊”的現(xiàn)象慢慢呈現(xiàn)出來。為了解決這個(gè)問題,我們需要應(yīng)用優(yōu)秀設(shè)計(jì)的第二法則:優(yōu)秀設(shè)計(jì)需要不斷重構(gòu)。重構(gòu)到優(yōu)秀設(shè)計(jì)。亡羊補(bǔ)牢-重構(gòu)面對需求的不可預(yù)測性,設(shè)計(jì)師根據(jù)經(jīng)驗(yàn)猜測程序可拙劣設(shè)計(jì)的影響如果設(shè)計(jì)已經(jīng)出現(xiàn)腐化,代碼漿糊已經(jīng)開始產(chǎn)生,我們最初的設(shè)計(jì)已經(jīng)成為拙劣的設(shè)計(jì)了,我們不去重構(gòu)的話,將會(huì)產(chǎn)生“破窗效應(yīng)”和“技術(shù)債務(wù)”問題。拙劣設(shè)計(jì)的影響如果設(shè)計(jì)已經(jīng)出現(xiàn)腐化,代碼漿糊已經(jīng)開始產(chǎn)生,我破窗效應(yīng)破窗理論破窗效應(yīng)(BreakPaneLaw)

沒修復(fù)的破窗,導(dǎo)致更多的窗戶被打破破窗效應(yīng)破窗理論破窗效應(yīng)(BreakPaneLaw)

破窗效應(yīng)破窗效應(yīng):沒修復(fù)的破窗,導(dǎo)致更多的窗戶被打破所謂“破窗效應(yīng)”,是關(guān)于環(huán)境對人們心理造成暗示性或誘導(dǎo)性影響的一種認(rèn)識。“破窗效應(yīng)”理論是指:一個(gè)房子如果窗戶破了,沒有人去修補(bǔ),隔不久,其它的窗戶也會(huì)莫名其妙的被人打破;一面墻,如果出現(xiàn)一些涂鴉沒有清洗掉,很快的,墻上就布滿了亂七八糟,不堪入目的東西。一個(gè)很干凈的地方,人們會(huì)不好意思丟垃圾,但是一旦地上有垃圾出現(xiàn)之后,人們就會(huì)毫不猶疑的拋,絲毫不覺羞愧。這真是很奇怪的現(xiàn)象破窗效應(yīng)破窗效應(yīng):沒修復(fù)的破窗,導(dǎo)致更多的窗戶被打破技術(shù)債務(wù)“出來混,遲早要還的”技術(shù)債務(wù)“出來混,遲早要還的”技術(shù)債務(wù)(TechnicalDebt)開發(fā)團(tuán)隊(duì)在設(shè)計(jì)或架構(gòu)選型時(shí)從短期效應(yīng)的角度選擇了一個(gè)易于實(shí)現(xiàn)的方案,但從長遠(yuǎn)來看,這種方案會(huì)帶來更消極的影響,亦即開發(fā)團(tuán)隊(duì)所欠的債務(wù)技術(shù)債務(wù)類似于金融債務(wù),它也會(huì)產(chǎn)生利息,這里的利息其實(shí)就是指由于魯莽的設(shè)計(jì)決策導(dǎo)致需要在未來的開發(fā)中付出更多努力的后果。我們可以選擇繼續(xù)支付利息,也可以通過重構(gòu)之前魯莽的設(shè)計(jì)來將本金一次付清。雖然一次性付清本金需要代價(jià),但卻可以降低未來的利息技術(shù)債務(wù)(TechnicalDebt)開發(fā)團(tuán)隊(duì)在設(shè)計(jì)或架技術(shù)債務(wù)技術(shù)債務(wù)的種類無意的——由于經(jīng)驗(yàn)的缺乏導(dǎo)致初級開發(fā)者編寫了質(zhì)量低劣的代碼。有意的——團(tuán)隊(duì)根據(jù)當(dāng)前而非未來進(jìn)行設(shè)計(jì)選型,這種方式可能很快就能解決當(dāng)前的問題,但卻很拙劣技術(shù)債務(wù)技術(shù)債務(wù)的種類技術(shù)債務(wù)很多敏捷團(tuán)隊(duì)都能認(rèn)識到技術(shù)債務(wù)相關(guān)的罪狀。就跟財(cái)務(wù)上的負(fù)債一樣,技術(shù)債務(wù)也會(huì)產(chǎn)生利息。要支付這些利息,就要付出額外努力維護(hù)和改進(jìn)正在“腐化”或基礎(chǔ)并不牢固的軟件。諸多敏捷人士推薦盡早償還技術(shù)債務(wù)。然而,大多數(shù)敏捷團(tuán)隊(duì)無法成功以金錢的方式計(jì)算技術(shù)債務(wù),因此無法得到有價(jià)值的深入理解和思考技術(shù)債務(wù)很多敏捷團(tuán)隊(duì)都能認(rèn)識到技術(shù)債務(wù)相關(guān)的罪狀。就跟財(cái)務(wù)上技術(shù)債務(wù)技術(shù)債務(wù)代碼的壞味道產(chǎn)生破窗效應(yīng)和技術(shù)債務(wù)的一個(gè)原因就是代碼產(chǎn)生了壞味道。代碼壞味道是指在代碼之中潛在問題的警示信號,并非所有的壞味道所指示的確實(shí)是問題,但大部分壞味道需要加以詳細(xì)查看,并做出相應(yīng)決定。代碼壞味道是需要重構(gòu)的癥狀。或者是潛在的問題,或者是缺陷。代碼的壞味道重點(diǎn)在代碼層次,與拙劣的設(shè)計(jì)相比是低的層次。代碼的壞味道產(chǎn)生破窗效應(yīng)和技術(shù)債務(wù)的一個(gè)原因就是代碼產(chǎn)生了壞偉大程序員的標(biāo)準(zhǔn)-避免壞味道“我不是什么偉大的程序員,我只是一個(gè)有著很多好習(xí)慣的程序員”。任何一個(gè)傻瓜都能寫出機(jī)器能讀懂的代碼,好的程序員應(yīng)該寫出人能懂的代碼。我們不是要告訴別人什么才是好的程序的標(biāo)準(zhǔn),而應(yīng)該告訴別人不應(yīng)該出現(xiàn)的錯(cuò)誤。偉大程序員的標(biāo)準(zhǔn)-避免壞味道“我不是什么偉大的程序員,我只是22種常見的代碼的壞味道重復(fù)代碼過長函數(shù)過大類過長參數(shù)列發(fā)散式變化散彈式修改依戀情結(jié)22種常見的代碼的壞味道重復(fù)代碼22種常見的代碼的壞味道數(shù)據(jù)泥團(tuán)基本類型迷戀分支語句(switch)平等繼承體系冗贅類夸夸其談未來性令人迷惑的暫時(shí)值域22種常見的代碼的壞味道數(shù)據(jù)泥團(tuán)22種常見的代碼的壞味道過度耦合的消息鏈中間轉(zhuǎn)手人狎昵關(guān)系異曲同工的類不完美的程序庫類純粹的數(shù)據(jù)類被拒絕的遺贈(zèng)過多的注釋22種常見的代碼的壞味道過度耦合的消息鏈代碼靜態(tài)分析代碼靜態(tài)分析工具是一種軟件,可以利用它對程序的源代碼進(jìn)行分析,自動(dòng)測試應(yīng)用系統(tǒng)的很多方面。在軟件

溫馨提示

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

評論

0/150

提交評論