課程簡介
無數軟件企業(yè)及其研發(fā)團隊都面臨著,大量初級程序開發(fā)人員低質量軟件開發(fā)帶來的嚴重問題,即使那些工作多年的高級程序員也存在著對提高軟件設計質量認識不深的問題。正是由于以上的問題,造成許多公司對運行了多年的核心業(yè)務,運行維護成本越來越高,卻不能更換、一直維護下去的惡性循環(huán)。如何通過培訓,切實有效地提高員工設計開發(fā)水平,從而有效地改善軟件設計質量,成為越來越多的軟件企業(yè)迫切需要解決的問題。
本課程不僅在講解高質量軟件設計的理論知識,更關鍵是將這些知識投放到各個真實的設計場景中。在這些場景中,我們可以看到我們要面對的設計難題,通過對設計難題的深入剖析,尋找問題的根源,對癥下藥,從而制訂出正確的設計方案。
目標收益
本課程不僅在講解高質量軟件設計的理論知識,更關鍵是將這些知識投放到各個真實的設計場景中。在這些場景中,我們可以看到我們要面對的設計難題,通過對設計難題的深入剖析,尋找問題的根源,對癥下藥,從而制訂出正確的設計方案。
不僅如此,本課程的案例選取了許多在需求變更中不斷變化的設計過程,從而用慢動作的手法展現(xiàn)了,最初的需求與設計是怎樣,第一次變更的設計,第二層變更的設計,第三次變更的設計……這樣的過程展示了,如何在需求變更的過程中,通過每一次正確的設計,不讓軟件退化,來保證高質量的軟件設計。
課程的最后,更加深入地探討軟件退化的原因,及其正確的應對策略:兩頂帽子與小步快跑的開發(fā)過程。
培訓對象
初中高級工程師、企業(yè)架構師、軟件設計師、技術決策/解決方案人員等。
課程大綱
第一部分 高質量軟件設計 第一章什么是高質量的軟件設計 |
情景?。很浖O計焦慮癥 1. 上次的設計太糟糕了,痛下決心以后要好好設計 2. 再次進行軟件設計時卻不知道該怎樣設計 1) 思考了很多,不知如何下手 2) 需求一變更,重新回到了糟糕的狀態(tài) 探討:如何進行高質量的軟件設計 什么是高質量的軟件設計 1. 軟件的質量保證:內部質量與外部質量 2. 高質量軟件設計的標準:易讀、易于維護、易于變更 |
第二章 軟件設計原則 |
易于閱讀: 1. 規(guī)范代碼、編寫注釋與表明動機 案例:代碼編寫范例與簡便易行的方法 2. 領域驅動設計 易于維護與變更 1. 互聯(lián)網+帶來的挑戰(zhàn) 1) 系統(tǒng)需要不斷地技術升級與改造 2) 傳統(tǒng)行業(yè)必須向互聯(lián)網轉型 3) 但技術變革不是換零件那么簡單 4) 剖析應對技術變革的方案 2. 案例講解軟件設計原則 1) 低耦合 a. 依賴反轉原則(DIP) 案例:購票業(yè)務類與數據訪問類 b. 開放-封閉原則(OCP) 案例:需求變更與可擴展點設計 案例:Square/Circle的解決方案 c. 里氏替換原則(LSP) 案例:Rectangle/Square的問題 案例:查詢參數傳遞類的問題 2) 高內聚 案例:評審系統(tǒng)的設計 a. 單一職責原則(SRP) 案例:財務憑證變更帶來的問題 案例:超級大函數與大對象的難題 案例:MySQL讀寫分離的改造過程 b. 信息專家模式 c. 不要重復自己原則(DRY) 典型的代碼重復案例 探討代碼復用的難題 探討軟件設計模式: 1. 設計模式的由來 2. 設計模式的發(fā)展 3. 設計模式對高質量軟件設計的作用 |
第二部分 軟件設計模式 第三章 適配器模式 |
什么是適配器模式 1. 軟件設計中外部接口的難題 2. 第三方框架帶來的設計難題 3. 適配器模式及其概念 適配器模式的應用 1. 適配器模式解決第三方框架帶來的難題 案例:Hibernate適配器的設計 2. 適配器模式解決外部接口的設計難題 案例:第三方支付接口的設計 案例:財務數據接口的設計 |
第四章 策略模式 |
什么是策略模式 1. 工資發(fā)放功能遇到的難題 1) 工資發(fā)放功能最初的設計及其問題 2) 對問題的分析過程及其新的設計思路 2. 策略模式及其概念 策略模式的應用 1. 案例:工資發(fā)放功能設計改進的過程 1) 工資發(fā)放功能的Java實現(xiàn) 2) 工資發(fā)放功能的C++實現(xiàn) 2. 案例:數據導出功能的設計實現(xiàn) 1) 深入理解開放-封閉原則 2) 數據導出功能的變更與改進過程 3. 案例:財務憑證生成功能的設計過程 1) 財務憑證生成功能的初始需求與設計 2) 財務憑證生成功能的擴展與分析過程 3) 財務憑證生成功能的最終設計 4) 深入理解單一職責原則 5) 學習“兩頂帽子”的設計方式 練習:財務憑證生成功能的設計與實現(xiàn) |
第五章 工廠模式 |
探討軟件設計中遇到的難題 1. 依賴反轉原則的設計難題 2. 開放-封閉原則的設計難題 3. 探討工廠模式的本質 簡單工廠模式 1. 簡單工廠模式的C++實現(xiàn) 2. 基于配置的簡單工廠模式 3. 剖析簡單工廠如何實現(xiàn)依賴反轉原則 案例:剖析Spring的beanFactory 4. 解讀工廠模式對設計的重大意義 5. 講解如何創(chuàng)建一個工廠 1) 創(chuàng)建工廠的步驟與關鍵點 2) 利用Spring框架簡化工廠類的設計 案例:數據導出功能的工廠實現(xiàn) 工廠方法模式 1. 工廠方法模式的概念 2. 工廠方法模式的應用 案例:SAX框架的工廠類設計 抽象工廠模式 1. 抽象工廠模式的概念 2. 抽象工廠模式的實現(xiàn) 案例:標簽庫的設計改進過程 1) 最初的標簽庫設計 2) 運用簡單工廠的標簽庫設計 3) 運用工廠方法的標簽庫設計 4) 運用抽象工廠的標簽庫設計 5) 最終基于配置的標簽庫設計 |
第六章 單例模式 |
什么是單例模式 1. 設計工廠類面臨的問題 2. 單例模式及其概念 3. 如何實現(xiàn)單例模式 單例模式的應用 1. 單例模式帶來的設計變革 1) 充血模型vs.貧血模型 2) 探討單例模式與性能問題 2. 單例模式改變了很多軟件的設計 |
第七章 原型模式 |
什么是原型模式 1. 工廠類在提供產品時遇到的設計問題 2. 原型模式及其概念 原型模式的設計實現(xiàn) 案例:函數調用的無副作用問題 案例:JavsScript中的原型模式 |
第八章 模板方法模式 |
什么是模板方法模式 1. 煮咖啡給我們的啟示 2. 設計工廠類的新思路 3. 模板方法模式及其概念 模板方法模式的作用與技巧 案例:一個工廠模板的設計與實現(xiàn) 深入理解不要重復自己原則 1. 重復代碼帶來的嚴重后果 2. 散彈式修改及其解決思路 3. 探討實現(xiàn)代碼復用的難題 4. 代碼復用在不同場合采用的方法 5. 模板方法模式在代碼復用中的作用 |
第九章 裝飾者模式 |
什么是裝飾者模式 1. 業(yè)務量增長帶來的多數據源問題 2. 運用裝飾者模式巧妙解決多數據源問題 3. 裝飾者模式及其概念 裝飾者模式的應用 案例:多數據源的設計實現(xiàn) 1. 多數據源問題的分析設計過程 2. 多數據源的設計與實現(xiàn) 案例:商城收銀系統(tǒng)的設計變更過程 1. 商城收銀系統(tǒng)期初的設計 2. 混合策略的設計與實現(xiàn) 3. 多層裝飾者的設計與實現(xiàn) 重新理解里氏替換原則 1. 透明的功能擴展 2. 里氏替換原則 練習:商場收銀系統(tǒng)的2種設計與實現(xiàn) |
第十章 橋接模式 |
什么是橋接模式 1. 對象繼承的泛濫 2. 橋接模式及其概念 橋接模式的應用 案例:員工管理與工資發(fā)放的設計 1. 員工管理與工資發(fā)放帶來的繼承泛濫問題 2. 采用橋接模式的設計與實現(xiàn) 案例:查詢支持類的設計 1. 查詢支持類遭遇的繼承泛濫問題 2. 查詢支持類的解決方案 3. 單例模式下查詢支持類的設計 深入體會單一職責原則 |
第十一章 享元模式 |
什么是享元模式 1. Hibernate是怎樣訪問數據的 2. 享元模式及其概念 享元模式的應用 案例:數據緩存的設計實現(xiàn) 案例:享元模式在大數據中的應用 |
第十二章 其它設計模式 |
觀察者模式:JobHunter的情景劇 代理模式:老板與秘書的差異 命令模式:像工作流一樣處理業(yè)務 外觀模式:超級家庭影院的煩惱 構建器模式:SQL Builder的設計 組合模式:如何構建一棵樹 中介者模式:QQ在溝通中的作用 迭代器模式:如何順序訪問一個集合 |
第三部分 基于模式的重構 第十三章 小步快跑的開發(fā)模式 |
關于設計模式的思考 1. 開發(fā)新項目敢于運用設計模式設計 2. 維護老項目不敢運用設計模式設計 問題的分析與思考 1. 對傳統(tǒng)軟件開發(fā)模式過程的梳理 2. 傳統(tǒng)軟件開發(fā)模式的風險與問題 什么是小步快跑 1. 小步快跑開發(fā)模式的步驟與特點 2. 小步快跑開發(fā)模式的應用 案例:數據推送程序的開發(fā)過程 總結:小步快跑如何能解決問題 |
第十四章 如何防止軟件退化 |
軟件如何會退化 1. 軟件工業(yè)時代的特點 2. 軟件工業(yè)時代的軟件研發(fā)問題 案例:演示一個遺留系統(tǒng)的退化過程 1) 軟件最初的設計 2) 軟件不斷變更與退化過程 結論:重構是軟件發(fā)展的必然 軟件重構的正確方法 1. 軟件重構面臨的問題 2. 軟件重構的原則與思路 3. 軟件重構的正確步驟 案例:演示一個遺留系統(tǒng)的重構過程 1) 運用“抽取方法”解決大函數問題 2) 運用“抽取類”解決大對象問題 3) 運用“抽取父類”提高代碼復用 4) 運用“兩頂帽子”解決新功能的擴展 5) 運用設計模式降低代碼耦合 6) 建立合理的分層結構 7) 運用“領域驅動設計”擁抱變化 4. 評估軟件重構的效果 |
第一部分 高質量軟件設計 第一章什么是高質量的軟件設計 情景?。很浖O計焦慮癥 1. 上次的設計太糟糕了,痛下決心以后要好好設計 2. 再次進行軟件設計時卻不知道該怎樣設計 1) 思考了很多,不知如何下手 2) 需求一變更,重新回到了糟糕的狀態(tài) 探討:如何進行高質量的軟件設計 什么是高質量的軟件設計 1. 軟件的質量保證:內部質量與外部質量 2. 高質量軟件設計的標準:易讀、易于維護、易于變更 |
第二章 軟件設計原則 易于閱讀: 1. 規(guī)范代碼、編寫注釋與表明動機 案例:代碼編寫范例與簡便易行的方法 2. 領域驅動設計 易于維護與變更 1. 互聯(lián)網+帶來的挑戰(zhàn) 1) 系統(tǒng)需要不斷地技術升級與改造 2) 傳統(tǒng)行業(yè)必須向互聯(lián)網轉型 3) 但技術變革不是換零件那么簡單 4) 剖析應對技術變革的方案 2. 案例講解軟件設計原則 1) 低耦合 a. 依賴反轉原則(DIP) 案例:購票業(yè)務類與數據訪問類 b. 開放-封閉原則(OCP) 案例:需求變更與可擴展點設計 案例:Square/Circle的解決方案 c. 里氏替換原則(LSP) 案例:Rectangle/Square的問題 案例:查詢參數傳遞類的問題 2) 高內聚 案例:評審系統(tǒng)的設計 a. 單一職責原則(SRP) 案例:財務憑證變更帶來的問題 案例:超級大函數與大對象的難題 案例:MySQL讀寫分離的改造過程 b. 信息專家模式 c. 不要重復自己原則(DRY) 典型的代碼重復案例 探討代碼復用的難題 探討軟件設計模式: 1. 設計模式的由來 2. 設計模式的發(fā)展 3. 設計模式對高質量軟件設計的作用 |
第二部分 軟件設計模式 第三章 適配器模式 什么是適配器模式 1. 軟件設計中外部接口的難題 2. 第三方框架帶來的設計難題 3. 適配器模式及其概念 適配器模式的應用 1. 適配器模式解決第三方框架帶來的難題 案例:Hibernate適配器的設計 2. 適配器模式解決外部接口的設計難題 案例:第三方支付接口的設計 案例:財務數據接口的設計 |
第四章 策略模式 什么是策略模式 1. 工資發(fā)放功能遇到的難題 1) 工資發(fā)放功能最初的設計及其問題 2) 對問題的分析過程及其新的設計思路 2. 策略模式及其概念 策略模式的應用 1. 案例:工資發(fā)放功能設計改進的過程 1) 工資發(fā)放功能的Java實現(xiàn) 2) 工資發(fā)放功能的C++實現(xiàn) 2. 案例:數據導出功能的設計實現(xiàn) 1) 深入理解開放-封閉原則 2) 數據導出功能的變更與改進過程 3. 案例:財務憑證生成功能的設計過程 1) 財務憑證生成功能的初始需求與設計 2) 財務憑證生成功能的擴展與分析過程 3) 財務憑證生成功能的最終設計 4) 深入理解單一職責原則 5) 學習“兩頂帽子”的設計方式 練習:財務憑證生成功能的設計與實現(xiàn) |
第五章 工廠模式 探討軟件設計中遇到的難題 1. 依賴反轉原則的設計難題 2. 開放-封閉原則的設計難題 3. 探討工廠模式的本質 簡單工廠模式 1. 簡單工廠模式的C++實現(xiàn) 2. 基于配置的簡單工廠模式 3. 剖析簡單工廠如何實現(xiàn)依賴反轉原則 案例:剖析Spring的beanFactory 4. 解讀工廠模式對設計的重大意義 5. 講解如何創(chuàng)建一個工廠 1) 創(chuàng)建工廠的步驟與關鍵點 2) 利用Spring框架簡化工廠類的設計 案例:數據導出功能的工廠實現(xiàn) 工廠方法模式 1. 工廠方法模式的概念 2. 工廠方法模式的應用 案例:SAX框架的工廠類設計 抽象工廠模式 1. 抽象工廠模式的概念 2. 抽象工廠模式的實現(xiàn) 案例:標簽庫的設計改進過程 1) 最初的標簽庫設計 2) 運用簡單工廠的標簽庫設計 3) 運用工廠方法的標簽庫設計 4) 運用抽象工廠的標簽庫設計 5) 最終基于配置的標簽庫設計 |
第六章 單例模式 什么是單例模式 1. 設計工廠類面臨的問題 2. 單例模式及其概念 3. 如何實現(xiàn)單例模式 單例模式的應用 1. 單例模式帶來的設計變革 1) 充血模型vs.貧血模型 2) 探討單例模式與性能問題 2. 單例模式改變了很多軟件的設計 |
第七章 原型模式 什么是原型模式 1. 工廠類在提供產品時遇到的設計問題 2. 原型模式及其概念 原型模式的設計實現(xiàn) 案例:函數調用的無副作用問題 案例:JavsScript中的原型模式 |
第八章 模板方法模式 什么是模板方法模式 1. 煮咖啡給我們的啟示 2. 設計工廠類的新思路 3. 模板方法模式及其概念 模板方法模式的作用與技巧 案例:一個工廠模板的設計與實現(xiàn) 深入理解不要重復自己原則 1. 重復代碼帶來的嚴重后果 2. 散彈式修改及其解決思路 3. 探討實現(xiàn)代碼復用的難題 4. 代碼復用在不同場合采用的方法 5. 模板方法模式在代碼復用中的作用 |
第九章 裝飾者模式 什么是裝飾者模式 1. 業(yè)務量增長帶來的多數據源問題 2. 運用裝飾者模式巧妙解決多數據源問題 3. 裝飾者模式及其概念 裝飾者模式的應用 案例:多數據源的設計實現(xiàn) 1. 多數據源問題的分析設計過程 2. 多數據源的設計與實現(xiàn) 案例:商城收銀系統(tǒng)的設計變更過程 1. 商城收銀系統(tǒng)期初的設計 2. 混合策略的設計與實現(xiàn) 3. 多層裝飾者的設計與實現(xiàn) 重新理解里氏替換原則 1. 透明的功能擴展 2. 里氏替換原則 練習:商場收銀系統(tǒng)的2種設計與實現(xiàn) |
第十章 橋接模式 什么是橋接模式 1. 對象繼承的泛濫 2. 橋接模式及其概念 橋接模式的應用 案例:員工管理與工資發(fā)放的設計 1. 員工管理與工資發(fā)放帶來的繼承泛濫問題 2. 采用橋接模式的設計與實現(xiàn) 案例:查詢支持類的設計 1. 查詢支持類遭遇的繼承泛濫問題 2. 查詢支持類的解決方案 3. 單例模式下查詢支持類的設計 深入體會單一職責原則 |
第十一章 享元模式 什么是享元模式 1. Hibernate是怎樣訪問數據的 2. 享元模式及其概念 享元模式的應用 案例:數據緩存的設計實現(xiàn) 案例:享元模式在大數據中的應用 |
第十二章 其它設計模式 觀察者模式:JobHunter的情景劇 代理模式:老板與秘書的差異 命令模式:像工作流一樣處理業(yè)務 外觀模式:超級家庭影院的煩惱 構建器模式:SQL Builder的設計 組合模式:如何構建一棵樹 中介者模式:QQ在溝通中的作用 迭代器模式:如何順序訪問一個集合 |
第三部分 基于模式的重構 第十三章 小步快跑的開發(fā)模式 關于設計模式的思考 1. 開發(fā)新項目敢于運用設計模式設計 2. 維護老項目不敢運用設計模式設計 問題的分析與思考 1. 對傳統(tǒng)軟件開發(fā)模式過程的梳理 2. 傳統(tǒng)軟件開發(fā)模式的風險與問題 什么是小步快跑 1. 小步快跑開發(fā)模式的步驟與特點 2. 小步快跑開發(fā)模式的應用 案例:數據推送程序的開發(fā)過程 總結:小步快跑如何能解決問題 |
第十四章 如何防止軟件退化 軟件如何會退化 1. 軟件工業(yè)時代的特點 2. 軟件工業(yè)時代的軟件研發(fā)問題 案例:演示一個遺留系統(tǒng)的退化過程 1) 軟件最初的設計 2) 軟件不斷變更與退化過程 結論:重構是軟件發(fā)展的必然 軟件重構的正確方法 1. 軟件重構面臨的問題 2. 軟件重構的原則與思路 3. 軟件重構的正確步驟 案例:演示一個遺留系統(tǒng)的重構過程 1) 運用“抽取方法”解決大函數問題 2) 運用“抽取類”解決大對象問題 3) 運用“抽取父類”提高代碼復用 4) 運用“兩頂帽子”解決新功能的擴展 5) 運用設計模式降低代碼耦合 6) 建立合理的分層結構 7) 運用“領域驅動設計”擁抱變化 4. 評估軟件重構的效果 |