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