軟件重構(gòu)與軟件設(shè)計(jì)模式培訓(xùn)(北京,11月2-4日)
【舉辦單位】北京曼頓培訓(xùn)網(wǎng) www.mdpxb.com
【咨詢(xún)電話(huà)】4006820825 010-56133998 13810210257
【培訓(xùn)日期】2021年11月2-4日
【培訓(xùn)地點(diǎn)】北京、直播
【培訓(xùn)對(duì)象】注重實(shí)效的各類(lèi)軟件研發(fā)中心的負(fù)責(zé)人、設(shè)計(jì)師、架構(gòu)師、項(xiàng)目經(jīng)理、技術(shù)總監(jiān)、質(zhì)量部門(mén)經(jīng)理、開(kāi)發(fā)工程師等。
【課程背景】
軟件重構(gòu)是指在不改變軟件功能和外部可見(jiàn)性的情況下,為了改善軟件的結(jié)構(gòu),提高清晰性、可擴(kuò)展性和可重用性而對(duì)軟件進(jìn)行的改造。簡(jiǎn)而言之,重構(gòu)就是改進(jìn)已經(jīng)寫(xiě)好的軟件的設(shè)計(jì)。在敏捷開(kāi)發(fā)方法學(xué)中,重構(gòu)常常是軟件開(kāi)發(fā)循環(huán)的一部分,開(kāi)發(fā)者通過(guò)增加新的測(cè)試和功能,或者重構(gòu)代碼來(lái)改善內(nèi)部的一致性和清晰性。重構(gòu)也是代碼維護(hù)中的一部分,既不修正錯(cuò)誤,又不增加新的功能性,而是用于提高代碼的可讀性或者改變代碼的結(jié)構(gòu)和設(shè)計(jì),使其在將來(lái)更容易被維護(hù)。特別是,在現(xiàn)有的程序的結(jié)構(gòu)下,給一個(gè)程序增加一個(gè)新的行為會(huì)非常困難,因此開(kāi)發(fā)人員可能先重構(gòu)這部分代碼,使加入新的行為變得容易。
【培訓(xùn)特色】
本課程注重實(shí)戰(zhàn),采用案例貫穿方式完成實(shí)踐,針對(duì)項(xiàng)目過(guò)程中技術(shù)人員常遇到的誤區(qū)進(jìn)行匯總、研討,以程序員的編程思維為前提,通過(guò)大量的真實(shí)案例,詳細(xì)地介紹了重構(gòu)需要注意的要點(diǎn)以及難點(diǎn),這些全部都是講師十幾年經(jīng)驗(yàn)的沉淀及總結(jié)。
本課程內(nèi)容理論性與實(shí)踐性都較強(qiáng),采取講課、討論、實(shí)踐三者結(jié)合的方式,1/3時(shí)間講解核心思想,1/3時(shí)間動(dòng)手重構(gòu)實(shí)踐,1/3點(diǎn)評(píng)分析總結(jié),形成一整套解決問(wèn)題的方法。
【培訓(xùn)要點(diǎn)】
軟件重構(gòu)面臨的背景都是相似的,程序員們?yōu)榱丝焖偻瓿尚枨蠛蜕暇(xiàn)而寫(xiě)出了最基本的代碼。然后在功能的不斷擴(kuò)充過(guò)程中,以打補(bǔ)丁的方式對(duì)代碼進(jìn)行擴(kuò)充,中間還會(huì)面臨著開(kāi)發(fā)人員的變更和離職。逐漸地,代碼就會(huì)變得越來(lái)越臃腫,漸漸地變得難以維護(hù)。
糟糕的軟件代碼會(huì)帶來(lái)開(kāi)發(fā)效率的降低,在糟糕架構(gòu)下加入新功能,會(huì)大大影響新功能的代碼質(zhì)量,開(kāi)發(fā)和調(diào)試時(shí)間都會(huì)成倍增加;其次是故障率的提升,在質(zhì)量低下的代碼中,總是容易隱藏著很多不易發(fā)現(xiàn)的坑,這些都會(huì)成為故障的隱患;同時(shí),架構(gòu)也會(huì)使得需求的完成大打折扣,使得設(shè)計(jì)好的目標(biāo),因?yàn)榧軜?gòu)限制或者性能等原因,只能完成80%甚至更低。
隨著不同產(chǎn)品的推出,不同客戶(hù)、不同版本的發(fā)布,需要維護(hù)的遺留代碼越來(lái)越多,重構(gòu)也就在所難免。不僅如此,所有的軟件系統(tǒng),經(jīng)過(guò)一段時(shí)間的維護(hù),都會(huì)逐漸變成遺留系統(tǒng),并且都遭遇了緩慢而不可抗拒的腐化。因此,軟件開(kāi)發(fā)人員不得不面對(duì)既有系統(tǒng)的混亂代碼。
本課程首先深入剖析軟件質(zhì)量下降的根源,提出重構(gòu)是軟件變更中保持高質(zhì)量的必然,講解如何運(yùn)用“兩頂帽子”的方式應(yīng)對(duì)變更,拒絕腐化。站在實(shí)戰(zhàn)的角度講解高質(zhì)量軟件設(shè)計(jì)的“小步快跑”過(guò)程。接著,用真實(shí)案例講解已經(jīng)代碼腐化的遺留系統(tǒng)是如何通過(guò)“軟件重構(gòu)七步曲”,由簡(jiǎn)入深、循序漸進(jìn)地重構(gòu)一個(gè)大系統(tǒng)。最后,以重構(gòu)的角度進(jìn)行實(shí)戰(zhàn),講解軟件如何在不斷變更的過(guò)程中,運(yùn)用設(shè)計(jì)模式來(lái)降低耦合,保持軟件設(shè)計(jì)質(zhì)量不退化。
【課程大綱】
第一部分 為什么軟件需要及時(shí)重構(gòu)
第一單元
剖析軟件質(zhì)量不斷下降的根源 質(zhì)量不斷下降的表現(xiàn):
1.程序代碼越來(lái)越亂
2.軟件維護(hù)成本越來(lái)越高
3.軟件變更越來(lái)越困難
4.無(wú)法進(jìn)行新技術(shù)的改造
以往采取的措施:
1.頭痛醫(yī)頭,腳痛醫(yī)腳
2.拋棄掉重新編寫(xiě)
3.因擔(dān)心未來(lái)變化而做的過(guò)度設(shè)計(jì)
帶來(lái)的問(wèn)題
1.團(tuán)隊(duì)成員越來(lái)越多但效率卻越來(lái)越低
2.測(cè)試變得越來(lái)越困難而任務(wù)繁重
3.軟件系統(tǒng)越來(lái)越笨重而不適應(yīng)未來(lái)變化
分析與反思
案例分析:一個(gè)遺留系統(tǒng)的演化過(guò)程
1.起初的設(shè)計(jì)
2.隨后的變更
3.質(zhì)量不斷下降的過(guò)程
軟件質(zhì)量下降的根源:
1.軟件總是因變更而變得越來(lái)越復(fù)雜
2.軟件結(jié)構(gòu)已經(jīng)不再適應(yīng)復(fù)雜的軟件需求
3.必須要調(diào)整軟件結(jié)構(gòu)以適應(yīng)新的軟件需求
軟件是因需求變更而質(zhì)量下降嗎?
案例分析:推演軟件變更的設(shè)計(jì)過(guò)程
應(yīng)對(duì)軟件變更的最佳方式:兩頂帽子
1.重構(gòu)原有代碼以適應(yīng)新的需求
2.實(shí)現(xiàn)新的需求
案例:演示兩頂帽子的設(shè)計(jì)過(guò)程
第二單元
高質(zhì)量的軟件設(shè)計(jì)過(guò)程 以往軟件設(shè)計(jì)的過(guò)程:
1.演示以往軟件設(shè)計(jì)的過(guò)程
2.剖析以往軟件設(shè)計(jì)的問(wèn)題與風(fēng)險(xiǎn)
小步快跑模式的開(kāi)發(fā)過(guò)程:
1.用最快的速度開(kāi)發(fā)一個(gè)最核心的功能
2.讓第一個(gè)版本運(yùn)行起來(lái)并可以驗(yàn)證
3.在第一個(gè)版本的基礎(chǔ)上不斷添加功能:
a.每次只添加一個(gè)很簡(jiǎn)單、很單一的功能
b.每次以?xún)身斆弊拥姆绞教砑有鹿δ?br />
c.運(yùn)行、調(diào)試與驗(yàn)證
d.重復(fù)這個(gè)過(guò)程添加下一個(gè)功能
4.復(fù)雜的系統(tǒng)就是由一次次正確開(kāi)發(fā)的不斷積累而成
案例:演示小步快跑的開(kāi)發(fā)過(guò)程
小步快跑解決的問(wèn)題:
1.復(fù)雜功能有效地解耦
2.代碼編寫(xiě)總是可測(cè)試與驗(yàn)證
3.簡(jiǎn)化設(shè)計(jì)與思考的復(fù)雜度
4.適時(shí)重構(gòu)以避免軟件退化
案例:數(shù)據(jù)推送程序的設(shè)計(jì)過(guò)程
第二部分 如何進(jìn)行軟件重構(gòu)
第三單元
何為重構(gòu) 軟件重構(gòu)的概念
1.重構(gòu)是一系列代碼的等量變換
案例:一個(gè)Hello World重構(gòu)過(guò)程
2.重構(gòu)的保險(xiǎn)索:自動(dòng)化測(cè)試
案例:Hello World的自動(dòng)化測(cè)試過(guò)程
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)生的過(guò)程
案例:演示抽取方法操作步驟
實(shí)踐抽取方法會(huì)遇到的問(wèn)題和解決方案
2.重構(gòu)第二步:拆分大對(duì)象
超級(jí)大對(duì)象及其危害
案例:演示超級(jí)大對(duì)象的產(chǎn)生過(guò)程
案例:演示抽取類(lèi)的操作步驟
講解單一職責(zé)設(shè)計(jì)原則
案例:演示“分久必合,合久必分”的重構(gòu)過(guò)程
3.重構(gòu)第三步:提高復(fù)用率
講解順序編程及其危害
“不要重復(fù)代碼”原則
案例:提高代碼復(fù)用的6個(gè)方法
案例:演示新增代碼時(shí)的代碼復(fù)用過(guò)程
用靜態(tài)檢查工具檢查重復(fù)代碼
4.重構(gòu)第四步:可擴(kuò)展設(shè)計(jì)
過(guò)度設(shè)計(jì) vs. 恰如其分的設(shè)計(jì)
講解“開(kāi)放-封閉”的設(shè)計(jì)原則
案例:講解可擴(kuò)展設(shè)計(jì)的4個(gè)方法
案例:講解新增代碼的可擴(kuò)展設(shè)計(jì)過(guò)程
5.重構(gòu)第五步:降低耦合度
案例:講解接口、實(shí)現(xiàn)與工廠(chǎng)模式
案例:講解外部接口解耦與適配器模式
案例:講解繼承泛濫問(wèn)題與橋接模式
案例:講解方法解耦與策略模式
案例:講解過(guò)程解耦與命令模式
案例:講解透明擴(kuò)展與組合模式、裝飾者模式
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)域模型分析方法
講解原文分析法與領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)
討論:如何制定重構(gòu)項(xiàng)目計(jì)劃
練習(xí):重構(gòu)一個(gè)小程序并編寫(xiě)測(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ì)量的工具
第三部分 運(yùn)用設(shè)計(jì)模式實(shí)戰(zhàn)軟件重構(gòu)
第五單元
適配器模式 適配器模式的應(yīng)用
1.適配器模式解決第三方框架帶來(lái)的難題
案例:Hibernate適配器的設(shè)計(jì)
2.適配器模式解決外部接口的設(shè)計(jì)難題
案例:第三方支付接口的設(shè)計(jì)
案例:財(cái)務(wù)數(shù)據(jù)接口的設(shè)計(jì)
第六單元
策略模式 策略模式的應(yīng)用
1.案例:工資發(fā)放功能設(shè)計(jì)改進(jìn)的過(guò)程
1)工資發(fā)放功能的Java實(shí)現(xiàn)
2)工資發(fā)放功能的C++實(shí)現(xiàn)
2.案例:數(shù)據(jù)導(dǎo)出功能的設(shè)計(jì)實(shí)現(xiàn)
1)深入理解開(kāi)放-封閉原則
2)數(shù)據(jù)導(dǎo)出功能的變更與改進(jìn)過(guò)程
3.案例:財(cái)務(wù)憑證生成功能的設(shè)計(jì)過(guò)程
1)財(cái)務(wù)憑證生成功能的初始需求與設(shè)計(jì)
2)財(cái)務(wù)憑證生成功能的擴(kuò)展與分析過(guò)程
3)財(cái)務(wù)憑證生成功能的最終設(shè)計(jì)
4)深入理解單一職責(zé)原則
5)學(xué)習(xí)“兩頂帽子”的設(shè)計(jì)方式
練習(xí):財(cái)務(wù)憑證生成功能的設(shè)計(jì)與實(shí)現(xiàn)
第七單元
工廠(chǎng)模式 探討軟件設(shè)計(jì)中遇到的難題
1.依賴(lài)反轉(zhuǎn)原則的設(shè)計(jì)難題
2.開(kāi)放-封閉原則的設(shè)計(jì)難題
3.探討工廠(chǎng)模式的本質(zhì)
簡(jiǎn)單工廠(chǎng)模式
1.簡(jiǎn)單工廠(chǎng)模式的C++實(shí)現(xiàn)
2.基于配置的簡(jiǎn)單工廠(chǎng)模式
3.剖析簡(jiǎn)單工廠(chǎng)如何實(shí)現(xiàn)依賴(lài)反轉(zhuǎn)原則
案例:剖析Spring的beanFactory
4.解讀工廠(chǎng)模式對(duì)設(shè)計(jì)的重大意義
5.講解如何創(chuàng)建一個(gè)工廠(chǎng)
1)創(chuàng)建工廠(chǎng)的步驟與關(guān)鍵點(diǎn)
2)利用Spring框架簡(jiǎn)化工廠(chǎng)類(lèi)的設(shè)計(jì)
案例:數(shù)據(jù)導(dǎo)出功能的工廠(chǎng)實(shí)現(xiàn)
工廠(chǎng)方法模式
1.工廠(chǎng)方法模式的概念
2.工廠(chǎng)方法模式的應(yīng)用
案例:SAX框架的工廠(chǎng)類(lèi)設(shè)計(jì)
抽象工廠(chǎng)模式
1.抽象工廠(chǎng)模式的概念
抽象工廠(chǎng)模式的實(shí)現(xiàn)
案例:標(biāo)簽庫(kù)的設(shè)計(jì)改進(jìn)過(guò)程
1)最初的標(biāo)簽庫(kù)設(shè)計(jì)
2)運(yùn)用簡(jiǎn)單工廠(chǎng)的標(biāo)簽庫(kù)設(shè)計(jì)
3)運(yùn)用工廠(chǎng)方法的標(biāo)簽庫(kù)設(shè)計(jì)
4)運(yùn)用抽象工廠(chǎng)的標(biāo)簽庫(kù)設(shè)計(jì)
5)最終基于配置的標(biāo)簽庫(kù)設(shè)計(jì)
第八單元
單例模式和原型模式 單例模式的應(yīng)用
1.單例模式帶來(lái)的設(shè)計(jì)變革
1)充血模型vs.貧血模型
2)探討單例模式與性能問(wèn)題
2.單例模式改變了很多軟件的設(shè)計(jì)
原型模式的應(yīng)用
1.工廠(chǎng)類(lèi)在提供產(chǎn)品時(shí)遇到的設(shè)計(jì)問(wèn)題
2.原型模式及其概念
原型模式的設(shè)計(jì)實(shí)現(xiàn)
案例:函數(shù)調(diào)用的無(wú)副作用問(wèn)題
案例:JavsScript中的原型模式
第九單元
模板方法模式 模板方法模式的作用與技巧
案例:一個(gè)工廠(chǎng)模板的設(shè)計(jì)與實(shí)現(xiàn)
深入理解不要重復(fù)自己原則
1.重復(fù)代碼帶來(lái)的嚴(yán)重后果
2.散彈式修改及其解決思路
3.探討實(shí)現(xiàn)代碼復(fù)用的難題
4.代碼復(fù)用在不同場(chǎng)合采用的方法
5.模板方法模式在代碼復(fù)用中的作用
第十單元
裝飾者模式及橋接模式 裝飾者模式的應(yīng)用
案例:多數(shù)據(jù)源的設(shè)計(jì)實(shí)現(xiàn)
1.多數(shù)據(jù)源問(wèn)題的分析設(shè)計(jì)過(guò)程
2.多數(shù)據(jù)源的設(shè)計(jì)與實(shí)現(xiàn)
案例:商城收銀系統(tǒng)的設(shè)計(jì)變更過(guò)程
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)
橋接模式的應(yīng)用
案例:?jiǎn)T工管理與工資發(fā)放的設(shè)計(jì)
1.員工管理與工資發(fā)放帶來(lái)的繼承泛濫問(wèn)題
2.采用橋接模式的設(shè)計(jì)與實(shí)現(xiàn)
案例:查詢(xún)支持類(lèi)的設(shè)計(jì)
1.查詢(xún)支持類(lèi)遭遇的繼承泛濫問(wèn)題
2.查詢(xún)支持類(lèi)的解決方案
3.單例模式下查詢(xún)支持類(lèi)的設(shè)計(jì)
深入體會(huì)單一職責(zé)原則
【講師介紹】
范老師,曼頓培訓(xùn)網(wǎng)(www.mdpxb.com)資深講師。航天信息前首席架構(gòu)師,暢銷(xiāo)書(shū)籍《大話(huà)重構(gòu)》作者,規(guī);艚軸PC,軟件架構(gòu)及重構(gòu)的客座講師,獨(dú)立咨詢(xún)顧問(wèn)。先后參與了數(shù)十個(gè)國(guó)內(nèi)大型軟件項(xiàng)目,涉及國(guó)家財(cái)政、軍工、稅務(wù)、醫(yī)療等領(lǐng)域的大數(shù)據(jù)建設(shè)、風(fēng)險(xiǎn)防控與人工智能研究,互聯(lián)網(wǎng)及大數(shù)據(jù)轉(zhuǎn)型的實(shí)踐者與倡導(dǎo)者。
【費(fèi)用及報(bào)名】
1、費(fèi)用:培訓(xùn)費(fèi)線(xiàn)下培訓(xùn)費(fèi):5900元/人;線(xiàn)上培訓(xùn)費(fèi):4700元/人(含培訓(xùn)費(fèi)、講義費(fèi));如需食宿,會(huì)務(wù)組可統(tǒng)一安排,費(fèi)用自理。
2、報(bào)名咨詢(xún):4006820825 010-56133998 56028090 13810210257 鮑老師
3、報(bào)名流程:電話(huà)登記-->填寫(xiě)報(bào)名表-->發(fā)出培訓(xùn)確認(rèn)函
4、備注:如課程已過(guò)期,請(qǐng)?jiān)L問(wèn)我們的網(wǎng)站,查詢(xún)最新課程
5、詳細(xì)資料請(qǐng)?jiān)L問(wèn)北京曼頓培訓(xùn)網(wǎng):www.mdpxb.com (每月在全國(guó)開(kāi)設(shè)四百多門(mén)公開(kāi)課,歡迎報(bào)名學(xué)習(xí))