課程描述INTRODUCTION
日程安排SCHEDULE
課程大綱Syllabus
軟件設(shè)計(jì)模式公開課
培訓(xùn)簡(jiǎn)介
無數(shù)軟件企業(yè)及其研發(fā)團(tuán)隊(duì)都面臨著,大量初級(jí)程序開發(fā)人員低質(zhì)量軟件開發(fā)帶來的嚴(yán)重問題,即使那些工作多年的高級(jí)程序員也存在著對(duì)提高軟件設(shè)計(jì)質(zhì)量認(rèn)識(shí)不深的問題。正是由于以上的問題,造成許多公司對(duì)運(yùn)行了多年的核心業(yè)務(wù),運(yùn)行維護(hù)成本越來越高,卻不能更換、一直維護(hù)下去的惡性循環(huán)。如何通過培訓(xùn),切實(shí)有效地提高員工設(shè)計(jì)開發(fā)水平,從而有效地改善軟件設(shè)計(jì)質(zhì)量,成為越來越多的軟件企業(yè)迫切需要解決的問題。本課程不僅在講解高質(zhì)量軟件設(shè)計(jì)的理論知識(shí),更關(guān)鍵是將這些知識(shí)投放到各個(gè)真實(shí)的設(shè)計(jì)場(chǎng)景中。在這些場(chǎng)景中,我們可以看到我們要面對(duì)的設(shè)計(jì)難題,通過對(duì)設(shè)計(jì)難題的深入剖析,尋找問題的根源,對(duì)癥下藥,從而制訂出正確的設(shè)計(jì)方案。不僅如此,本課程的案例選取了許多在需求變更中不斷變化的設(shè)計(jì)過程,從而用慢動(dòng)作的手法展現(xiàn)了,最初的需求與設(shè)計(jì)是怎樣,第一次變更的設(shè)計(jì),第二層變更的設(shè)計(jì),第三次變更的設(shè)計(jì)……這樣的過程展示了,如何在需求變更的過程中,通過每一次正確的設(shè)計(jì),不讓軟件退化,來保證高質(zhì)量的軟件設(shè)計(jì)。本課程首先深入剖析軟件質(zhì)量下降的根源,提出重構(gòu)是軟件變更中保持高質(zhì)量的必然,講解如何運(yùn)用“兩頂帽子”的方式應(yīng)對(duì)變更,拒絕腐化。站在實(shí)戰(zhàn)的角度講解高質(zhì)量軟件設(shè)計(jì)的“小步快跑”過程。接著,用真實(shí)案例講解已經(jīng)代碼腐化的遺留系統(tǒng)是如何通過“軟件重構(gòu)七步曲”,由簡(jiǎn)入深、循序漸進(jìn)地重構(gòu)一個(gè)大系統(tǒng)。課程的最后,更加深層次地講解軟件重構(gòu)面臨的難題,以及有效地解決之道。
本課程注重實(shí)戰(zhàn),采用案例貫穿的方式,收集了大量的真實(shí)案例,針對(duì)項(xiàng)目過程中技術(shù)人員常犯的錯(cuò)誤進(jìn)行了匯總與研討,并最終形成培訓(xùn)教程。通過大量的真實(shí)案例,詳細(xì)地介紹了軟件設(shè)計(jì)過程需要注意的要點(diǎn)以及難點(diǎn),這些知識(shí)都是講師十幾年經(jīng)驗(yàn)的總結(jié)。
學(xué)員基礎(chǔ)
學(xué)員學(xué)習(xí)本課程應(yīng)具備下列基礎(chǔ)知識(shí):
l. 目前正在面臨復(fù)雜遺留系統(tǒng),必須需要維護(hù)和重構(gòu)
2. 具有面向?qū)ο蟮幕靖拍?,熟悉基本設(shè)計(jì)模式。
課程大綱:
第一部分 高質(zhì)量軟件設(shè)計(jì)
第一章
什么是高質(zhì)量的軟件設(shè)計(jì) 情景?。很浖O(shè)計(jì)焦慮癥
1.上次的設(shè)計(jì)太糟糕了,痛下決心以后要好好設(shè)計(jì)
2.再次進(jìn)行軟件設(shè)計(jì)時(shí)卻不知道該怎樣設(shè)計(jì)
1)思考了很多,不知如何下手
2)需求一變更,重新回到了糟糕的狀態(tài)
探討:如何進(jìn)行高質(zhì)量的軟件設(shè)計(jì)
什么是高質(zhì)量的軟件設(shè)計(jì)
1.軟件的質(zhì)量保證:內(nèi)部質(zhì)量與外部質(zhì)量
2.高質(zhì)量軟件設(shè)計(jì)的標(biāo)準(zhǔn):易讀、易于維護(hù)、易于變更
第二章
軟件設(shè)計(jì)原則 易于閱讀:
1.規(guī)范代碼、編寫注釋與表明動(dòng)機(jī)
案例:代碼編寫范例與簡(jiǎn)便易行的方法
2.領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)
易于維護(hù)與變更
1.互聯(lián)網(wǎng)+帶來的挑戰(zhàn)
1)系統(tǒng)需要不斷地技術(shù)升級(jí)與改造
2)傳統(tǒng)行業(yè)必須向互聯(lián)網(wǎng)轉(zhuǎn)型
3)但技術(shù)變革不是換零件那么簡(jiǎn)單
4)剖析應(yīng)對(duì)技術(shù)變革的方案
2.案例講解軟件設(shè)計(jì)原則
1)低耦合
a.依賴反轉(zhuǎn)原則(DIP)
案例:購票業(yè)務(wù)類與數(shù)據(jù)訪問類
b.開放-封閉原則(OCP)
案例:需求變更與可擴(kuò)展點(diǎn)設(shè)計(jì)
案例:Square/Circle的解決方案
c.里氏替換原則(LSP)
案例:Rectangle/Square的問題
案例:查詢參數(shù)傳遞類的問題
2)高內(nèi)聚
案例:評(píng)審系統(tǒng)的設(shè)計(jì)
a.單一職責(zé)原則(SRP)
案例:財(cái)務(wù)憑證變更帶來的問題
案例:超級(jí)大函數(shù)與大對(duì)象的難題
案例:MySQL讀寫分離的改造過程
b.信息專家模式
c.不要重復(fù)自己原則(DRY)
典型的代碼重復(fù)案例
探討代碼復(fù)用的難題
探討軟件設(shè)計(jì)模式:
1.設(shè)計(jì)模式的由來
2.設(shè)計(jì)模式的發(fā)展
3.設(shè)計(jì)模式對(duì)高質(zhì)量軟件設(shè)計(jì)的作用
第二部分 軟件設(shè)計(jì)模式
第三章
適配器模式 什么是適配器模式
1.軟件設(shè)計(jì)中外部接口的難題
2.第三方框架帶來的設(shè)計(jì)難題
3.適配器模式及其概念
適配器模式的應(yīng)用
1.適配器模式解決第三方框架帶來的難題
案例:Hibernate適配器的設(shè)計(jì)
2.適配器模式解決外部接口的設(shè)計(jì)難題
案例:第三方支付接口的設(shè)計(jì)
案例:財(cái)務(wù)數(shù)據(jù)接口的設(shè)計(jì)
第四章
策略模式 什么是策略模式
1.工資發(fā)放功能遇到的難題
1)工資發(fā)放功能最初的設(shè)計(jì)及其問題
2)對(duì)問題的分析過程及其新的設(shè)計(jì)思路
2.策略模式及其概念
策略模式的應(yīng)用
1.案例:工資發(fā)放功能設(shè)計(jì)改進(jìn)的過程
1)工資發(fā)放功能的Java實(shí)現(xiàn)
2)工資發(fā)放功能的C++實(shí)現(xiàn)
2.案例:數(shù)據(jù)導(dǎo)出功能的設(shè)計(jì)實(shí)現(xiàn)
1)深入理解開放-封閉原則
2)數(shù)據(jù)導(dǎo)出功能的變更與改進(jìn)過程
3.案例:財(cái)務(wù)憑證生成功能的設(shè)計(jì)過程
1)財(cái)務(wù)憑證生成功能的初始需求與設(shè)計(jì)
2)財(cái)務(wù)憑證生成功能的擴(kuò)展與分析過程
3)財(cái)務(wù)憑證生成功能的最終設(shè)計(jì)
4)深入理解單一職責(zé)原則
5)學(xué)習(xí)“兩頂帽子”的設(shè)計(jì)方式
練習(xí):財(cái)務(wù)憑證生成功能的設(shè)計(jì)與實(shí)現(xiàn)
第五章
工廠模式 探討軟件設(shè)計(jì)中遇到的難題
1.依賴反轉(zhuǎn)原則的設(shè)計(jì)難題
2.開放-封閉原則的設(shè)計(jì)難題
3.探討工廠模式的本質(zhì)
簡(jiǎn)單工廠模式
1.簡(jiǎn)單工廠模式的C++實(shí)現(xiàn)
2.基于配置的簡(jiǎn)單工廠模式
3.剖析簡(jiǎn)單工廠如何實(shí)現(xiàn)依賴反轉(zhuǎn)原則
案例:剖析Spring的beanFactory
4.解讀工廠模式對(duì)設(shè)計(jì)的重大意義
5.講解如何創(chuàng)建一個(gè)工廠
1)創(chuàng)建工廠的步驟與關(guān)鍵點(diǎn)
2)利用Spring框架簡(jiǎn)化工廠類的設(shè)計(jì)
案例:數(shù)據(jù)導(dǎo)出功能的工廠實(shí)現(xiàn)
工廠方法模式
1.工廠方法模式的概念
2.工廠方法模式的應(yīng)用
案例:SAX框架的工廠類設(shè)計(jì)
抽象工廠模式
1.抽象工廠模式的概念
2.抽象工廠模式的實(shí)現(xiàn)
案例:標(biāo)簽庫的設(shè)計(jì)改進(jìn)過程
1)最初的標(biāo)簽庫設(shè)計(jì)
2)運(yùn)用簡(jiǎn)單工廠的標(biāo)簽庫設(shè)計(jì)
3)運(yùn)用工廠方法的標(biāo)簽庫設(shè)計(jì)
4)運(yùn)用抽象工廠的標(biāo)簽庫設(shè)計(jì)
5)最終基于配置的標(biāo)簽庫設(shè)計(jì)
第六章
單例模式 什么是單例模式
1.設(shè)計(jì)工廠類面臨的問題
2.單例模式及其概念
3.如何實(shí)現(xiàn)單例模式
單例模式的應(yīng)用
1.單例模式帶來的設(shè)計(jì)變革
1)充血模型vs.貧血模型
2)探討單例模式與性能問題
2.單例模式改變了很多軟件的設(shè)計(jì)
第七章
原型模式 什么是原型模式
1.工廠類在提供產(chǎn)品時(shí)遇到的設(shè)計(jì)問題
2.原型模式及其概念
原型模式的設(shè)計(jì)實(shí)現(xiàn)
案例:函數(shù)調(diào)用的無副作用問題
案例:JavsScript中的原型模式
第八章
模板方法模式 什么是模板方法模式
1.煮咖啡給我們的啟示
2.設(shè)計(jì)工廠類的新思路
3.模板方法模式及其概念
模板方法模式的作用與技巧
案例:一個(gè)工廠模板的設(shè)計(jì)與實(shí)現(xiàn)
深入理解不要重復(fù)自己原則
1.重復(fù)代碼帶來的嚴(yán)重后果
2.散彈式修改及其解決思路
3.探討實(shí)現(xiàn)代碼復(fù)用的難題
4.代碼復(fù)用在不同場(chǎng)合采用的方法
5.模板方法模式在代碼復(fù)用中的作用
第九章
裝飾者模式 什么是裝飾者模式
1.業(yè)務(wù)量增長(zhǎng)帶來的多數(shù)據(jù)源問題
2.運(yùn)用裝飾者模式巧妙解決多數(shù)據(jù)源問題
3.裝飾者模式及其概念
裝飾者模式的應(yīng)用
案例:多數(shù)據(jù)源的設(shè)計(jì)實(shí)現(xiàn)
1.多數(shù)據(jù)源問題的分析設(shè)計(jì)過程
2.多數(shù)據(jù)源的設(shè)計(jì)與實(shí)現(xiàn)
案例:商城收銀系統(tǒng)的設(shè)計(jì)變更過程
1.商城收銀系統(tǒng)期初的設(shè)計(jì)
2.混合策略的設(shè)計(jì)與實(shí)現(xiàn)
3.多層裝飾者的設(shè)計(jì)與實(shí)現(xiàn)
重新理解里氏替換原則
1.透明的功能擴(kuò)展
2.里氏替換原則
練習(xí):商場(chǎng)收銀系統(tǒng)的2種設(shè)計(jì)與實(shí)現(xiàn)
第十章
橋接模式 什么是橋接模式
1.對(duì)象繼承的泛濫
2.橋接模式及其概念
橋接模式的應(yīng)用
案例:?jiǎn)T工管理與工資發(fā)放的設(shè)計(jì)
1.員工管理與工資發(fā)放帶來的繼承泛濫問題
2.采用橋接模式的設(shè)計(jì)與實(shí)現(xiàn)
案例:查詢支持類的設(shè)計(jì)
1.查詢支持類遭遇的繼承泛濫問題
2.查詢支持類的解決方案
3.單例模式下查詢支持類的設(shè)計(jì)
深入體會(huì)單一職責(zé)原則
第十一章
享元模式 什么是享元模式
1.Hibernate是怎樣訪問數(shù)據(jù)的
2.享元模式及其概念
享元模式的應(yīng)用
案例:數(shù)據(jù)緩存的設(shè)計(jì)實(shí)現(xiàn)
案例:享元模式在大數(shù)據(jù)中的應(yīng)用
第十二章
其它設(shè)計(jì)模式 觀察者模式:JobHunter的情景劇
代理模式:老板與秘書的差異
命令模式:像工作流一樣處理業(yè)務(wù)
外觀模式:超級(jí)家庭影院的煩惱
構(gòu)建器模式:SQL Builder的設(shè)計(jì)
組合模式:如何構(gòu)建一棵樹
中介者模式:QQ在溝通中的作用
迭代器模式:如何順序訪問一個(gè)集合
第2-4天 軟件重構(gòu)實(shí)戰(zhàn)授課內(nèi)容
第一部分 為什么軟件需要及時(shí)重構(gòu)
第一單元
剖析軟件質(zhì)量不斷下降的根源 質(zhì)量不斷下降的表現(xiàn):
1.程序代碼越來越亂
2.軟件維護(hù)成本越來越高
3.軟件變更越來越困難
4.無法進(jìn)行新技術(shù)的改造
以往采取的措施:
1.頭痛醫(yī)頭,腳痛醫(yī)腳
2.拋棄掉重新編寫
3.因擔(dān)心未來變化而做的過度設(shè)計(jì)
帶來的問題
1.團(tuán)隊(duì)成員越來越多但效率卻越來越低
2.測(cè)試變得越來越困難而任務(wù)繁重
3.軟件系統(tǒng)越來越笨重而不適應(yīng)未來變化
分析與反思
案例分析:一個(gè)遺留系統(tǒng)的演化過程
1.起初的設(shè)計(jì)
2.隨后的變更
3.質(zhì)量不斷下降的過程
軟件質(zhì)量下降的根源:
1.軟件總是因變更而變得越來越復(fù)雜
2.軟件結(jié)構(gòu)已經(jīng)不再適應(yīng)復(fù)雜的軟件需求
3.必須要調(diào)整軟件結(jié)構(gòu)以適應(yīng)新的軟件需求
軟件是因需求變更而質(zhì)量下降嗎?
案例分析:推演軟件變更的設(shè)計(jì)過程
應(yīng)對(duì)軟件變更的*方式:兩頂帽子
1.重構(gòu)原有代碼以適應(yīng)新的需求
2.實(shí)現(xiàn)新的需求
案例:演示兩頂帽子的設(shè)計(jì)過程
案例:財(cái)務(wù)憑證生成程序的設(shè)計(jì)過程
第二單元
高質(zhì)量的軟件設(shè)計(jì)過程 案例講解軟件設(shè)計(jì)原則
1.低耦合
1)依賴反轉(zhuǎn)原則(DIP)
案例:購票業(yè)務(wù)類與數(shù)據(jù)訪問類
2)開放-封閉原則(OCP)
案例:需求變更與可擴(kuò)展點(diǎn)設(shè)計(jì)
案例:Square/Circle的解決方案
3)里氏替換原則(LSP)
案例:Rectangle/Square的問題
案例:查詢參數(shù)傳遞類的問題
2.高內(nèi)聚
1)單一職責(zé)原則(SRP)
案例:財(cái)務(wù)憑證變更帶來的問題
案例:超級(jí)大函數(shù)與大對(duì)象的難題
案例:MySQL讀寫分離的改造過程
2)信息專家模式
3)不要重復(fù)自己原則(DRY)
4)典型的代碼重復(fù)案例
5)探討代碼復(fù)用的難題
以往軟件設(shè)計(jì)的過程:
3.演示以往軟件設(shè)計(jì)的過程
4.剖析以往軟件設(shè)計(jì)的問題與風(fēng)險(xiǎn)
小步快跑模式的開發(fā)過程:
1.用最快的速度開發(fā)一個(gè)最核心的功能
2.讓第一個(gè)版本運(yùn)行起來并可以驗(yàn)證
3.在第一個(gè)版本的基礎(chǔ)上不斷添加功能:
a.每次只添加一個(gè)很簡(jiǎn)單、很單一的功能
b.每次以兩頂帽子的方式添加新功能
c.運(yùn)行、調(diào)試與驗(yàn)證
d.重復(fù)這個(gè)過程添加下一個(gè)功能
4.復(fù)雜的系統(tǒng)就是由一次次正確開發(fā)的不斷積累而成
案例:演示小步快跑的開發(fā)過程
小步快跑解決的問題:
1.復(fù)雜功能有效地解耦
2.代碼編寫總是可測(cè)試與驗(yàn)證
3.簡(jiǎn)化設(shè)計(jì)與思考的復(fù)雜度
4.適時(shí)重構(gòu)以避免軟件退化
案例:數(shù)據(jù)推送程序的設(shè)計(jì)過程
第二部分 如何進(jìn)行軟件重構(gòu)
第三單元
何為重構(gòu) 軟件重構(gòu)的概念
1.重構(gòu)是一系列代碼的等量變換
案例:一個(gè)Hello World重構(gòu)過程
2.重構(gòu)的保險(xiǎn)索:自動(dòng)化測(cè)試
案例:Hello World的自動(dòng)化測(cè)試過程
3.軟件修改的四種動(dòng)機(jī)——重構(gòu)的價(jià)值
4.一個(gè)真實(shí)的謊言——重構(gòu)的誤區(qū)
5.重構(gòu)的主要方法與技巧
案例分析:重構(gòu)一個(gè)大型遺留系統(tǒng)
1.重構(gòu)第一步:分解大函數(shù)
超級(jí)大函數(shù)及其危害
案例:演示大函數(shù)產(chǎn)生的過程
案例:演示抽取方法操作步驟
實(shí)踐抽取方法會(huì)遇到的問題和解決方案
2.重構(gòu)第二步:拆分大對(duì)象
超級(jí)大對(duì)象及其危害
案例:演示超級(jí)大對(duì)象的產(chǎn)生過程
案例:演示抽取類的操作步驟
講解單一職責(zé)設(shè)計(jì)原則
案例:演示“分久必合,合久必分”的重構(gòu)過程
3.重構(gòu)第三步:提高復(fù)用率
講解順序編程及其危害
“不要重復(fù)代碼”原則
案例:提高代碼復(fù)用的6個(gè)方法
案例:演示新增代碼時(shí)的代碼復(fù)用過程
用靜態(tài)檢查工具檢查重復(fù)代碼
4.重構(gòu)第四步:可擴(kuò)展設(shè)計(jì)
過度設(shè)計(jì) vs. 恰如其分的設(shè)計(jì)
講解“開放-封閉”的設(shè)計(jì)原則
案例:講解可擴(kuò)展設(shè)計(jì)的4個(gè)方法
案例:講解新增代碼的可擴(kuò)展設(shè)計(jì)過程
5.重構(gòu)第五步:降低耦合度
案例:講解接口、實(shí)現(xiàn)與工廠模式
案例:講解外部接口解耦與適配器模式
6.重構(gòu)第六步:系統(tǒng)分層
反思軟件架構(gòu)需要怎樣的分層結(jié)構(gòu)
遺留系統(tǒng)如何擁抱需求變化
遺留系統(tǒng)如何應(yīng)對(duì)技術(shù)變革
7.重構(gòu)第七步:領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的概念
講解領(lǐng)域模型分析方法
案例:智能溫控器分析設(shè)計(jì)過程(嵌入式+物聯(lián)網(wǎng))
1)最初的領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)過程
2)需求變更的領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)
3)面向物聯(lián)網(wǎng)的架構(gòu)演進(jìn)
練習(xí):重構(gòu)一個(gè)小程序并編寫測(cè)試腳本
第四單元
關(guān)于重構(gòu)的討論 什么時(shí)候重構(gòu)
1.重構(gòu)是一種習(xí)慣
2.重構(gòu)讓程序可讀
3.重構(gòu),才好復(fù)用
4.先重構(gòu),再擴(kuò)展
5.緊急任務(wù)時(shí)的重構(gòu)
測(cè)試的困境
1.重構(gòu)初期的困局
2.解耦與自動(dòng)化測(cè)試
3.建立自動(dòng)化測(cè)試體系
重構(gòu)的評(píng)價(jià)
1.評(píng)價(jià)軟件質(zhì)量的指標(biāo)
2.評(píng)價(jià)軟件質(zhì)量的工具
講師介紹:
范老師 獨(dú)立咨詢顧問,暢銷書籍《架構(gòu)真意》與《大話重構(gòu)》的作者,規(guī)?;艚軸PC。曾任航天信息首席架構(gòu)師,哈工大軟件工程碩士,軟件架構(gòu)及重構(gòu)的客座講師。從事軟件研發(fā)工作近二十年,并且現(xiàn)在一直堅(jiān)守在大型軟件架構(gòu)設(shè)計(jì)一線工作。從需求分析、軟件開發(fā)到項(xiàng)目管理、架構(gòu)設(shè)計(jì)都有豐富的從業(yè)經(jīng)驗(yàn)。先后參與了數(shù)十個(gè)國(guó)內(nèi)大型軟件項(xiàng)目,涉及國(guó)家財(cái)政、軍工、稅務(wù)、醫(yī)療等領(lǐng)域的大數(shù)據(jù)中臺(tái)建設(shè)、風(fēng)險(xiǎn)防控與人工智能研究。互聯(lián)網(wǎng)轉(zhuǎn)型、微服務(wù)轉(zhuǎn)型及大數(shù)據(jù)轉(zhuǎn)型的實(shí)踐者與倡導(dǎo)者。同時(shí),還是大型遺留系統(tǒng)改造專業(yè)戶,多次參與大型遺留系統(tǒng)改造、軟件系統(tǒng)重構(gòu)等重大項(xiàng)目,長(zhǎng)期關(guān)注大型業(yè)務(wù)系統(tǒng)的品質(zhì)保證、防止腐化以及技術(shù)改造等困擾軟件企業(yè)的問題,在遺留系統(tǒng)優(yōu)化與改造方面有豐富的經(jīng)驗(yàn)。
軟件設(shè)計(jì)模式公開課
轉(zhuǎn)載:http://www.jkyingpanluxiangji.com/gkk_detail/301753.html
已開課時(shí)間Have start time
IT相關(guān)內(nèi)訓(xùn)
- 大模型技術(shù)與應(yīng)用培訓(xùn) 葉梓
- 軟件安全意識(shí)加強(qiáng)與技能提高 張勝生
- Fine BI 數(shù)據(jù)分析與 張曉如
- Python高效辦公自動(dòng)化 張曉如
- 云計(jì)算的應(yīng)用領(lǐng)域和實(shí)踐 武威
- 電力信息化:價(jià)值和建設(shè)分析 劉宇佳
- 信息安全風(fēng)險(xiǎn)評(píng)估與加固技能 張勝生
- CISSP認(rèn)證培訓(xùn)課程 張勝生
- IT崗位數(shù)智化能力提升路徑 甄文智
- 滲透測(cè)試與攻防實(shí)戰(zhàn)高級(jí)課程 張勝生
- 互聯(lián)網(wǎng)新技術(shù)在銀行的應(yīng)用 武威
- 網(wǎng)安管理崗培訓(xùn) 張勝生