課程簡介
全真案例,借助案例與設(shè)計模式知識的原理,借助最佳實踐,幫助您提高設(shè)計能力,從而提高開發(fā)效率和設(shè)計質(zhì)量
以新視角,揭示模式的本質(zhì)、思想方法,剖析出模式之“道”,跳出“為模式而模式”的“陷阱”
提升設(shè)計能力,使開發(fā)人員由“編程小工”到設(shè)計專家
提出場景驅(qū)動設(shè)計,利用領(lǐng)域建模、職責(zé)驅(qū)動、擴展式設(shè)計以及重構(gòu),提高軟件設(shè)計質(zhì)量,實現(xiàn)卓越軟件設(shè)計
關(guān)注業(yè)界內(nèi)設(shè)計模式,以實戰(zhàn)訓(xùn)練驅(qū)動對面向?qū)ο笤O(shè)計的理解與運用
開拓設(shè)計人員視野,引入函數(shù)式編程思想以彌補面向?qū)ο笤O(shè)計的不足
目標(biāo)收益
解決:
員工無法接手遺留系統(tǒng),原因是代碼雜亂,可讀性差
團隊成員沒有設(shè)計模式知識與經(jīng)驗,無法實施敏捷開發(fā)
系統(tǒng)難以重構(gòu),不利于產(chǎn)品的重用與二次開發(fā)
開發(fā)效率得不到保障,因為詳細(xì)設(shè)計人員不能理解架構(gòu)文檔與詳細(xì)設(shè)計方案
設(shè)計方案難于應(yīng)對需求變更
設(shè)計的系統(tǒng)架構(gòu)缺乏可擴展性、可維護(hù)性和可測試性,不能合理地重用
架構(gòu)、設(shè)計、開發(fā)三個環(huán)節(jié)中各個角色不能理解設(shè)計意圖,很難溝通
培訓(xùn)對象
課程大綱
議題一:卓越的軟件設(shè)計思想 |
卓越軟件設(shè)計的特征 ?體現(xiàn)簡單之美的設(shè)計方案 ?可重用的對象與組件 ?支持良好的可擴展性 ?充分的測試覆蓋率 ?可讀性高的代碼; 案例分析 ?代碼閱讀:通過運用組合方法模式思想對代碼進(jìn)行重構(gòu),進(jìn)而演化為Template Method模式去除重復(fù)代碼 ?代碼閱讀:分析面向?qū)ο笤O(shè)計方法所不能解決的重復(fù)問題,從而引入函數(shù)式思想去除重復(fù) ?郵件服務(wù)器:分析郵件服務(wù)器代碼暴露的問題,在可重用性、代碼可維護(hù)性、可擴展性等諸多方面著手,剖析代碼壞味道。 面向?qū)ο蟮脑O(shè)計要素 ?合理封裝的要點 ?迪米特法則 ?繼承與委派的區(qū)別 ?關(guān)注點分離原則 ?多態(tài)與抽象 案例分析 ?報表系統(tǒng)之參數(shù)處理:了解封裝的本質(zhì),明確職責(zé)的分配以及智能對象的意義,理解“信息專家”模式。 ?事務(wù)處理的設(shè)計:通過分析職責(zé)的承擔(dān)者,從而辨別職責(zé)的分配,并以組合橋接的方式進(jìn)行抽象的分離。 ?電子商務(wù)系統(tǒng)之訂單處理:對行為的封裝,職責(zé)的委派而非繼承的方式,進(jìn)而重構(gòu)到Command模式。 面向?qū)ο笤O(shè)計核心的SOLID原則 ?單一職責(zé)原則(SRP):該原則是合理封裝對象,分配職責(zé)的重要原則; ?開放封閉原則(OCP):該原則體現(xiàn)了擴展式開發(fā)的核心思想; ?Liskov替換原則(LSP):可以將該原則視為是對是否正確運用繼承的檢驗標(biāo)準(zhǔn); ?接口隔離原則(ISP):對于接口的粒度進(jìn)行規(guī)劃,以便于設(shè)計出更好的接口; ?依賴倒置原則(DCP):對于依賴和解耦的分析,利用抽象保證設(shè)計的可擴展性; |
議題二:整潔代碼與重構(gòu) |
編寫整潔的代碼 ?糟糕的代碼與混亂的代價,整潔代碼的藝術(shù); ?如何對變量、方法和類進(jìn)行命名; ?如何設(shè)計方法,遵循DRY與CQS原則; ?如何進(jìn)行錯誤處理和異常處理; ?如何組織類和包; 案例分析 給出真實項目中真實的代碼片段,對這些代碼進(jìn)行分析,并利用整潔代碼的原則進(jìn)行改善。這些代碼涉及到的問題包括:循環(huán)嵌套太多,方法命名不合理,缺乏足夠的封裝,性能問題; 通過重構(gòu)改善既有代碼 ?破窗理論與重構(gòu)的原則,包括重構(gòu)與設(shè)計的關(guān)系,重構(gòu)的時機和開展重構(gòu)的原因 ?介紹代碼的壞味道:詳細(xì)介紹各種代碼的壞味道,包括重復(fù)的代碼、過長函數(shù)、過大類、依戀情結(jié)、平行繼承體系、發(fā)散式變化、霰彈式修改等22種壞味道。 ?介紹常見的重構(gòu)手法,例如提取參數(shù)、提取方法、提取類、搬移方法、提取參數(shù)對象,以委托取代繼承等,并利用實際的案例展現(xiàn)如何對丑陋的代碼進(jìn)行重構(gòu)。 案例分析 對媒體管理系統(tǒng)的壞味道識別,利用重構(gòu)改善代碼,并逐步引入Strategy模式與Visitor模式,進(jìn)而改善設(shè)計。 |
議題三:合理的職責(zé)分配是良好設(shè)計的基礎(chǔ) |
職責(zé)驅(qū)動設(shè)計 ?職責(zé)的層次:包括職責(zé)層次的識別、職責(zé)層次與軟件架構(gòu)層次之間的關(guān)系、職責(zé)與概念、規(guī)約與實現(xiàn) ?對象的角色:角色、職責(zé)與協(xié)作是三位一體的關(guān)系,角色是發(fā)起職責(zé)的對象,職責(zé)則應(yīng)該是對象之間的協(xié)作 ?模塊級的職責(zé)分配:如何根據(jù)職責(zé)對模塊進(jìn)行分解,了解高內(nèi)聚、松耦合原則。 案例分析 ?對郵件服務(wù)器進(jìn)行分析,通過分辨職責(zé)層次,來改善設(shè)計。并提出需求變更,從而引入對觀察者模式、策略模式、簡單工廠模式、調(diào)停者模式與職責(zé)鏈模式的對比與分析; ?處理HTTP請求與應(yīng)答,體現(xiàn)信息持有者角色; ?JMS對Queue的創(chuàng)建體現(xiàn)構(gòu)造者角色; ?稅務(wù)報告的生成體現(xiàn)服務(wù)提供者角色; ?服務(wù)定位器體現(xiàn)協(xié)調(diào)者角色; ?內(nèi)容驗證器體現(xiàn)控制者角色; ?EISaaS的模塊劃分; ?基于AKKA的REST框架Spray; ?國際報稅系統(tǒng)的架構(gòu)演進(jìn),提出模塊重用的方式; 職責(zé)分配遵循的原則與模式 ?分析單一職責(zé)原則:分析該原則的核心思想,關(guān)注對象的變化點 ?專家模式:專家模式的核心思想是信息的持有者是操作該信息的專家 ?自治對象:分析了自治對象的特征,分別包括:最小完備,穩(wěn)定空間,自我履行與獨立進(jìn)化 案例分析 設(shè)備狀態(tài)的遷移:利用“自治對象”思想逐步引入State模式,并結(jié)合實際需求分析標(biāo)準(zhǔn)State模式的問題,從而對該模式進(jìn)行改進(jìn) |
議題四:應(yīng)對需求的變化,設(shè)計可擴展的軟件 |
如何應(yīng)對需求的變化 ?抽象的關(guān)鍵在于尋找多個對象(或行為)具有的共同特征,并對特性進(jìn)行泛化 ?函數(shù)式非凡的抽象能力 ?識別變化點,對變化進(jìn)行封裝 ?解耦具體依賴:介紹常見的解除具體依賴的方法,包括表驅(qū)動法、配置與反射、IoC容器、慣例優(yōu)于配置 案例分析 ?項目管理模型的抽象,通過對多種項目管理過程進(jìn)行分析,對各種模型概念進(jìn)行分類,并抽象出模型的共同特征,從而簡化模型; ?電子商務(wù)系統(tǒng)的票據(jù)業(yè)務(wù)規(guī)則,引入Specification模式; ?CIMS系統(tǒng)的機器加載策略,引入Strategy模式; ?短信服務(wù),引入Facade模式與Adpater模式; ?人力資源系統(tǒng)考勤模塊,介紹Gateway模式; ?URL Web請求,講解如何解耦具體依賴; 擴展式設(shè)計 ?擴展式設(shè)計的過程 案例分析 ?消息隊列規(guī)范的設(shè)計:通過分析JMS、MSMQ的設(shè)計,理解抽象的含義,例如理解面向接口設(shè)計、接?隔離原則、按意圖設(shè)計、Facade模式; ?保單問卷調(diào)查:講解如何從壞設(shè)計逐步重構(gòu)到Visitor模式; |
議題五:設(shè)計模式的本質(zhì) |
設(shè)計模式的境界 ?初學(xué)者:拔劍四顧心茫然,不知道該如何運用設(shè)計模式 ?熟練者:過尤不及,為模式而模式,常常導(dǎo)致設(shè)計過度 ?精通者:無招勝有招,掌握了設(shè)計模式的本質(zhì),能夠恰如其分地運用設(shè)計模式 設(shè)計的常見問題 ?理論與設(shè)計無法有效結(jié)合 ?過度運用設(shè)計模式 ?急于編碼,沒有有效的設(shè)計 設(shè)計模式的本質(zhì) ?合理的職責(zé)分配是基礎(chǔ) ?封裝并抽象變化是核心 ?合理運用面向?qū)ο笤O(shè)計思想 ?合理運用面向?qū)ο笤O(shè)計原則 案例分析:JUnit框架 通過全面剖析JUnit測試框架,了解大師的設(shè)計藝術(shù),展現(xiàn)JUnit是如何保證框架的簡單、可擴展、可重用。內(nèi)容包括: ?JUnit的組件結(jié)構(gòu) ?JUnit的Test Case設(shè)計 ?如何支持Test Result顯示的擴展 ?JUnit中如何通過復(fù)雜的設(shè)計來簡化用戶的使用 |
議題一:卓越的軟件設(shè)計思想 卓越軟件設(shè)計的特征 ?體現(xiàn)簡單之美的設(shè)計方案 ?可重用的對象與組件 ?支持良好的可擴展性 ?充分的測試覆蓋率 ?可讀性高的代碼; 案例分析 ?代碼閱讀:通過運用組合方法模式思想對代碼進(jìn)行重構(gòu),進(jìn)而演化為Template Method模式去除重復(fù)代碼 ?代碼閱讀:分析面向?qū)ο笤O(shè)計方法所不能解決的重復(fù)問題,從而引入函數(shù)式思想去除重復(fù) ?郵件服務(wù)器:分析郵件服務(wù)器代碼暴露的問題,在可重用性、代碼可維護(hù)性、可擴展性等諸多方面著手,剖析代碼壞味道。 面向?qū)ο蟮脑O(shè)計要素 ?合理封裝的要點 ?迪米特法則 ?繼承與委派的區(qū)別 ?關(guān)注點分離原則 ?多態(tài)與抽象 案例分析 ?報表系統(tǒng)之參數(shù)處理:了解封裝的本質(zhì),明確職責(zé)的分配以及智能對象的意義,理解“信息專家”模式。 ?事務(wù)處理的設(shè)計:通過分析職責(zé)的承擔(dān)者,從而辨別職責(zé)的分配,并以組合橋接的方式進(jìn)行抽象的分離。 ?電子商務(wù)系統(tǒng)之訂單處理:對行為的封裝,職責(zé)的委派而非繼承的方式,進(jìn)而重構(gòu)到Command模式。 面向?qū)ο笤O(shè)計核心的SOLID原則 ?單一職責(zé)原則(SRP):該原則是合理封裝對象,分配職責(zé)的重要原則; ?開放封閉原則(OCP):該原則體現(xiàn)了擴展式開發(fā)的核心思想; ?Liskov替換原則(LSP):可以將該原則視為是對是否正確運用繼承的檢驗標(biāo)準(zhǔn); ?接口隔離原則(ISP):對于接口的粒度進(jìn)行規(guī)劃,以便于設(shè)計出更好的接口; ?依賴倒置原則(DCP):對于依賴和解耦的分析,利用抽象保證設(shè)計的可擴展性; |
議題二:整潔代碼與重構(gòu) 編寫整潔的代碼 ?糟糕的代碼與混亂的代價,整潔代碼的藝術(shù); ?如何對變量、方法和類進(jìn)行命名; ?如何設(shè)計方法,遵循DRY與CQS原則; ?如何進(jìn)行錯誤處理和異常處理; ?如何組織類和包; 案例分析 給出真實項目中真實的代碼片段,對這些代碼進(jìn)行分析,并利用整潔代碼的原則進(jìn)行改善。這些代碼涉及到的問題包括:循環(huán)嵌套太多,方法命名不合理,缺乏足夠的封裝,性能問題; 通過重構(gòu)改善既有代碼 ?破窗理論與重構(gòu)的原則,包括重構(gòu)與設(shè)計的關(guān)系,重構(gòu)的時機和開展重構(gòu)的原因 ?介紹代碼的壞味道:詳細(xì)介紹各種代碼的壞味道,包括重復(fù)的代碼、過長函數(shù)、過大類、依戀情結(jié)、平行繼承體系、發(fā)散式變化、霰彈式修改等22種壞味道。 ?介紹常見的重構(gòu)手法,例如提取參數(shù)、提取方法、提取類、搬移方法、提取參數(shù)對象,以委托取代繼承等,并利用實際的案例展現(xiàn)如何對丑陋的代碼進(jìn)行重構(gòu)。 案例分析 對媒體管理系統(tǒng)的壞味道識別,利用重構(gòu)改善代碼,并逐步引入Strategy模式與Visitor模式,進(jìn)而改善設(shè)計。 |
議題三:合理的職責(zé)分配是良好設(shè)計的基礎(chǔ) 職責(zé)驅(qū)動設(shè)計 ?職責(zé)的層次:包括職責(zé)層次的識別、職責(zé)層次與軟件架構(gòu)層次之間的關(guān)系、職責(zé)與概念、規(guī)約與實現(xiàn) ?對象的角色:角色、職責(zé)與協(xié)作是三位一體的關(guān)系,角色是發(fā)起職責(zé)的對象,職責(zé)則應(yīng)該是對象之間的協(xié)作 ?模塊級的職責(zé)分配:如何根據(jù)職責(zé)對模塊進(jìn)行分解,了解高內(nèi)聚、松耦合原則。 案例分析 ?對郵件服務(wù)器進(jìn)行分析,通過分辨職責(zé)層次,來改善設(shè)計。并提出需求變更,從而引入對觀察者模式、策略模式、簡單工廠模式、調(diào)停者模式與職責(zé)鏈模式的對比與分析; ?處理HTTP請求與應(yīng)答,體現(xiàn)信息持有者角色; ?JMS對Queue的創(chuàng)建體現(xiàn)構(gòu)造者角色; ?稅務(wù)報告的生成體現(xiàn)服務(wù)提供者角色; ?服務(wù)定位器體現(xiàn)協(xié)調(diào)者角色; ?內(nèi)容驗證器體現(xiàn)控制者角色; ?EISaaS的模塊劃分; ?基于AKKA的REST框架Spray; ?國際報稅系統(tǒng)的架構(gòu)演進(jìn),提出模塊重用的方式; 職責(zé)分配遵循的原則與模式 ?分析單一職責(zé)原則:分析該原則的核心思想,關(guān)注對象的變化點 ?專家模式:專家模式的核心思想是信息的持有者是操作該信息的專家 ?自治對象:分析了自治對象的特征,分別包括:最小完備,穩(wěn)定空間,自我履行與獨立進(jìn)化 案例分析 設(shè)備狀態(tài)的遷移:利用“自治對象”思想逐步引入State模式,并結(jié)合實際需求分析標(biāo)準(zhǔn)State模式的問題,從而對該模式進(jìn)行改進(jìn) |
議題四:應(yīng)對需求的變化,設(shè)計可擴展的軟件 如何應(yīng)對需求的變化 ?抽象的關(guān)鍵在于尋找多個對象(或行為)具有的共同特征,并對特性進(jìn)行泛化 ?函數(shù)式非凡的抽象能力 ?識別變化點,對變化進(jìn)行封裝 ?解耦具體依賴:介紹常見的解除具體依賴的方法,包括表驅(qū)動法、配置與反射、IoC容器、慣例優(yōu)于配置 案例分析 ?項目管理模型的抽象,通過對多種項目管理過程進(jìn)行分析,對各種模型概念進(jìn)行分類,并抽象出模型的共同特征,從而簡化模型; ?電子商務(wù)系統(tǒng)的票據(jù)業(yè)務(wù)規(guī)則,引入Specification模式; ?CIMS系統(tǒng)的機器加載策略,引入Strategy模式; ?短信服務(wù),引入Facade模式與Adpater模式; ?人力資源系統(tǒng)考勤模塊,介紹Gateway模式; ?URL Web請求,講解如何解耦具體依賴; 擴展式設(shè)計 ?擴展式設(shè)計的過程 案例分析 ?消息隊列規(guī)范的設(shè)計:通過分析JMS、MSMQ的設(shè)計,理解抽象的含義,例如理解面向接口設(shè)計、接?隔離原則、按意圖設(shè)計、Facade模式; ?保單問卷調(diào)查:講解如何從壞設(shè)計逐步重構(gòu)到Visitor模式; |
議題五:設(shè)計模式的本質(zhì) 設(shè)計模式的境界 ?初學(xué)者:拔劍四顧心茫然,不知道該如何運用設(shè)計模式 ?熟練者:過尤不及,為模式而模式,常常導(dǎo)致設(shè)計過度 ?精通者:無招勝有招,掌握了設(shè)計模式的本質(zhì),能夠恰如其分地運用設(shè)計模式 設(shè)計的常見問題 ?理論與設(shè)計無法有效結(jié)合 ?過度運用設(shè)計模式 ?急于編碼,沒有有效的設(shè)計 設(shè)計模式的本質(zhì) ?合理的職責(zé)分配是基礎(chǔ) ?封裝并抽象變化是核心 ?合理運用面向?qū)ο笤O(shè)計思想 ?合理運用面向?qū)ο笤O(shè)計原則 案例分析:JUnit框架 通過全面剖析JUnit測試框架,了解大師的設(shè)計藝術(shù),展現(xiàn)JUnit是如何保證框架的簡單、可擴展、可重用。內(nèi)容包括: ?JUnit的組件結(jié)構(gòu) ?JUnit的Test Case設(shè)計 ?如何支持Test Result顯示的擴展 ?JUnit中如何通過復(fù)雜的設(shè)計來簡化用戶的使用 |