架構(gòu)師
其他
工程師
推薦課程
average > 0 ? $model->average . '分' : '10.0分' ?>

重構(gòu)-改善遺留軟件質(zhì)量和設(shè)計

K. Kang

特聘講師

18年IT研發(fā)經(jīng)驗。先后在北大方正技術(shù)研究院、方正電子、方正國際、明博教育科技股份有限公司工作,任程序員、高級系統(tǒng)分析員、系統(tǒng)架構(gòu)師、研發(fā)部部門經(jīng)理、研發(fā)中心總監(jiān)等職;擁有20余項國家發(fā)明專利。



9年培訓(xùn)經(jīng)驗,從事企業(yè)IT軟件設(shè)計培訓(xùn)及咨詢,曾任方正電子內(nèi)部高級講師、信產(chǎn)部計算機(jī)技術(shù)培訓(xùn)中心高級技術(shù)顧問。
康老師對軟件設(shè)計中的理論結(jié)合實際、折中有深刻的體會和經(jīng)驗。以案例豐富,從實際項目出發(fā),來源于實踐而著稱,擅長用直白的語言說明復(fù)雜的原理。

18年IT研發(fā)經(jīng)驗。先后在北大方正技術(shù)研究院、方正電子、方正國際、明博教育科技股份有限公司工作,任程序員、高級系統(tǒng)分析員、系統(tǒng)架構(gòu)師、研發(fā)部部門經(jīng)理、研發(fā)中心總監(jiān)等職;擁有20余項國家發(fā)明專利。 9年培訓(xùn)經(jīng)驗,從事企業(yè)IT軟件設(shè)計培訓(xùn)及咨詢,曾任方正電子內(nèi)部高級講師、信產(chǎn)部計算機(jī)技術(shù)培訓(xùn)中心高級技術(shù)顧問。 康老師對軟件設(shè)計中的理論結(jié)合實際、折中有深刻的體會和經(jīng)驗。以案例豐富,從實際項目出發(fā),來源于實踐而著稱,擅長用直白的語言說明復(fù)雜的原理。

課程費用

5800.00 /人

課程時長

2

成為教練

課程簡介

軟件開發(fā)往往大部分時候面對的是既有系統(tǒng)的二次開發(fā),維護(hù)遺留系統(tǒng)。隨著系統(tǒng)的不斷升級,需要維護(hù)的遺留系統(tǒng)的代碼也越來越多。在這個過程中,二次開發(fā)的工程師,往往會非常痛苦,會遇到添加新功能困難、修改bug困難,甚至不的不面對推翻之前的遺留系統(tǒng),重新來過。導(dǎo)致開發(fā)效率極其低下,并且成本很高,系統(tǒng)很不穩(wěn)定。所以重構(gòu)也就在所難免。所有的軟件系統(tǒng)將來都會變成遺留系統(tǒng),并且都可能會遭遇性能越來越低下、穩(wěn)定行越來越差等情況,因此軟件開發(fā)人員不得不面對既有系統(tǒng)的各種問題,本課程正是告訴你如何重構(gòu)既有的遺留系統(tǒng), 如何重構(gòu)代碼,重構(gòu)設(shè)計,重構(gòu)架構(gòu)。
培訓(xùn)客戶:
包括:阿里(杭州總部)2次、京東(北京總部)2次、平安銀行(2次)、中金在線、洛基亞(4次)、IBM、HP公司、杭州恒生電子、用友軟件、中國電信、中石油、西南電信、中國移動、上海盛大網(wǎng)絡(luò)、廈門航空、通化鋼鐵集團(tuán)、總參等近百家企事業(yè)單位。

目標(biāo)收益

培訓(xùn)對象

各類軟件研發(fā)中心的軟件設(shè)計師、架構(gòu)師, 項目經(jīng)理,技術(shù)總監(jiān),質(zhì)量部門經(jīng)理,開發(fā)人員,對重構(gòu)技術(shù)懷有疑問和困惑,需要梳理解答的團(tuán)隊和個人,效果最佳。

課程大綱

第一單元 認(rèn)識優(yōu)秀的系統(tǒng)及劣質(zhì)系統(tǒng),建立重構(gòu)意識 內(nèi)容一:建立構(gòu)建優(yōu)秀系統(tǒng)的思維
1.優(yōu)秀的系統(tǒng)有什么特征
2.劣質(zhì)代碼有什么特征
3.劣質(zhì)代碼的代價
4.為什么很多程序員都討厭閱讀別人的代碼?
5.如何閱讀別人的系統(tǒng)?
6.如何寫出簡練,易于理解,模塊化,層次性,設(shè)計良好,高效,優(yōu)雅,并且清晰的系統(tǒng)。

內(nèi)容二:軟件系統(tǒng)開始壞死的癥狀
1.硬化Rigidity——系統(tǒng)變得越來越難以變更,修復(fù)或增添新功能的代價高昂;
2.脆弱Fragility——對系統(tǒng)的任何哪怕是微小的變更都可能造成四處(甚至是與變更處沒有邏輯上的關(guān)聯(lián)之處的崩潰;
3.綁死Immobility——抽取系統(tǒng)的任何部分用來復(fù)用都非常困難;
4.膠著Viscosity——以與原有設(shè)計保持一致的方式來對實施變更已經(jīng)非常困難,誘使開發(fā)人員繞過它選擇容易但有害的途徑,其結(jié)果卻使系統(tǒng)死的更快。
5.案例:閱讀一段爛代碼,分析其對系統(tǒng)的危害。

內(nèi)容三:建立重構(gòu)的思想
1.重構(gòu)與添加新功能的關(guān)系。
2.不要在同一個地方跌倒兩次(何時重構(gòu)? 增加新功能時;修補(bǔ)錯誤時;Review碼時一并重構(gòu))
3.重構(gòu)與重寫的取舍(系統(tǒng)實在混亂怎么辦?)
4.如何保證重構(gòu)的正確。
5.代碼、類、組件、子系統(tǒng)、系統(tǒng)、大型分布式系統(tǒng)的重構(gòu)聯(lián)系及區(qū)別
6.重構(gòu)與設(shè)計的關(guān)系
7.通過案例,演示某系統(tǒng)片段,展示重構(gòu)的基本思想(一個好的結(jié)構(gòu)是如何做到系統(tǒng)論的可擴(kuò)展性;以及如何將混亂的代碼重構(gòu)到一個好的結(jié)構(gòu))

內(nèi)容四:案例—通過實際項目演示重構(gòu)
1.介紹項目需求情況,進(jìn)行設(shè)計
2.閱讀代碼指出代碼壞癥狀
3.通過重構(gòu)逐步改善代碼質(zhì)量
第二單元 代碼的壞味道的指標(biāo)及特點,以及應(yīng)對的重構(gòu)之道 內(nèi)容一:重構(gòu)關(guān)鍵—發(fā)現(xiàn)代碼的壞味道
1.模塊的高扇入與低扇出
2.圈復(fù)雜度在項目中的實用價值
3.語句的平均長度——論述其深層含義(函數(shù)不需要故意寫得短小,清晰的代碼自然短小;當(dāng)長則長與當(dāng)短則短)
4.函數(shù)參數(shù)個數(shù)的辯證
5.標(biāo)識參數(shù)----丑陋不堪、駭人聽聞的做法?
6.Ward Cunningham原則——深合己意的例程
7.“每個函數(shù)只做一件事”與“每個函數(shù)一個抽象層級”(程序員往往很難學(xué)會遵循這條規(guī)則,寫出只停留于一個抽象層級上的函數(shù))
8.Switch-case語句——程序設(shè)計的萬惡之源?
9.“指令與查詢分離”的意義。
10.Try/Catch代碼塊
11.重復(fù)的代碼/模塊
12.可以根據(jù)客戶現(xiàn)在的項目作為案例進(jìn)行現(xiàn)場分析,找出相應(yīng)的代碼壞味道

內(nèi)容二:某項目分析----重點了解現(xiàn)實項目代碼的充斥大量壞味道
1.介紹項目需求情況,閱讀現(xiàn)有代碼指出代碼壞癥狀
2.不看不知道,代碼到底有多爛—觸目驚心的代碼
3.通過重構(gòu)逐步改善代碼質(zhì)量
4.本案例學(xué)習(xí)多種重構(gòu)方式
第三單元 重構(gòu)實踐 內(nèi)容一:重構(gòu)初步:識別編碼中的壞味道
1.重復(fù)的代碼
2.過大的類及過長的函數(shù)
3.耦合:依戀情結(jié)、數(shù)據(jù)泥團(tuán)及過度耦合的消息鏈
4.分散的邏輯:發(fā)散的變化及霰彈式的修改
5.復(fù)雜的邏輯:switch現(xiàn)象及平行繼承體系
6.其它:中間人、數(shù)據(jù)類、不佳的繼承

內(nèi)容二:重構(gòu)實踐:面向?qū)ο蠹邦I(lǐng)域驅(qū)動
1.將過程化設(shè)計轉(zhuǎn)化為對象設(shè)計,并討論過程化設(shè)計與對象化設(shè)計的特點及歷史博弈;并給出過程式設(shè)計及及對象設(shè)計的模式——合適的就是好的!
2.封裝值域/自封裝值域的重構(gòu)
3.以數(shù)據(jù)類取代記錄的策略
4.以對象取代數(shù)組的策略
5.以類取代型別碼——Replace Type Code with Class
6.以子類取代型別碼——Replace Type Code with Subclasses
7.以值域取代子類——Replace Subclass with Fields
8.建模為屬性與建模為對象——系統(tǒng)建模中的微妙變化
9.Data Class——純粹的數(shù)據(jù)類
10.以State/Strategy取代型別碼
11.通過案例介紹函數(shù)的重構(gòu)

內(nèi)容三:重構(gòu)實踐—復(fù)雜條件表達(dá)式重構(gòu)
1.常見問題,如何處理讓人瘋狂的復(fù)雜分類?
2.以多態(tài)取代條件式——Replace Conditional with Polymorphism
3.提煉繼承體系——Extract Hierarchy
4.塑造模板函數(shù)——Form Template Method
5.以委托取代繼承——Replace Inheritance with Delegation
6.以繼承取代委托——Replace Delegation with Inheritance
7.用Strategy替換條件邏輯
8.用Bridge組合動態(tài)變化
9.用State替換狀態(tài)改變條件語句
10.用Composite替換隱含樹
11.用Command替換條件調(diào)度程序
12.在多態(tài)體系中,如何處理子條件不一致的情況——繼承體系中的高級技巧。

內(nèi)容四:重構(gòu)實踐—去除“大泥球”式的設(shè)計
1.過大的函數(shù)、模塊、子系統(tǒng)
2.依戀情結(jié)、數(shù)據(jù)泥團(tuán)
3.從系統(tǒng)設(shè)計的角度分析混亂產(chǎn)生的原因
4.通過案例介紹如何分解系統(tǒng)

內(nèi)容五:重構(gòu)實踐—職責(zé)單一
1.一個模塊完成一個職責(zé)——子模塊位于同一個抽象層次
2.功能函數(shù)與邏輯函數(shù)的分離
3.Divergent Change——發(fā)散的變化
1.Shotgun Surgery——散彈槍式的修改
第四單元 重構(gòu)不是萬能的——系統(tǒng)的重構(gòu)及預(yù)先設(shè)計的技巧 內(nèi)容一:重構(gòu)的優(yōu)勢與局限
1.重構(gòu)的優(yōu)勢與局限
2.預(yù)先設(shè)計與重構(gòu)
3.代碼重構(gòu)與系統(tǒng)重構(gòu)的異同
4.逐漸演化的系統(tǒng)及其特點
5.對大型遺留的系統(tǒng)的處理
6.分析某大型系統(tǒng),如何設(shè)計重構(gòu)及逐演化,以及我們在實際項目中何去何從。

內(nèi)容二:什么是好的設(shè)計以及如何預(yù)先設(shè)計實現(xiàn)
1.什么是好的設(shè)計和衡量的手段
2.可伸縮性(Scalable)軟件能夠在用戶的使用率、用戶的數(shù)目增加很快的情況下,保持合理的性能。
3.可擴(kuò)展性(Extensibility)一個軟件系統(tǒng)應(yīng)當(dāng)允許導(dǎo)入新技術(shù)/功能而不引起原有系統(tǒng)大的變化。 結(jié)合案例,通過那些手段如何實現(xiàn)該目標(biāo)
4.靈活性(Flexibility)修改或改進(jìn)一個已投入運行的軟件所需工作量的大小。 結(jié)合案例,通過那些手段如何實現(xiàn)該目標(biāo)
5.可維護(hù)性(maintainability):為滿足用戶新的要求,或當(dāng)環(huán)境發(fā)生了變化或運行中發(fā)現(xiàn)了新的錯誤時,對一個已投入運行的軟件進(jìn)行相應(yīng)診斷和修改所需工作量的大小。
6.可復(fù)用性(Reusability)一個軟件或其部件能再次用于其他應(yīng)用的程度。
7.軟件的變化分析---發(fā)現(xiàn)變化/封裝變化/隔離變化
8.分析真實項目,如何預(yù)先設(shè)計,給我們哪些啟示,我們可以學(xué)習(xí)到什么

內(nèi)容三:系統(tǒng)設(shè)計中的關(guān)鍵因素
1.抽象(Abstraction)、封裝(Encapsulation)和信息隱藏(Information Hiding)
2.分而治之(Divide-And-Conquer)和模塊化(modularization)
3.策略和實現(xiàn)的分離(Separation of Policy and Implementation)
4.接口和實現(xiàn)的分離(Separation of Interface and Implementation)
5.單一引用點(Single Point of Reference)

內(nèi)容四:案例—某項目設(shè)計重構(gòu)案例分析
1.案例情況
2.演示如何發(fā)現(xiàn)設(shè)計壞味道,以及如何重構(gòu)
第五單元 模式與重構(gòu)實踐 內(nèi)容一:模式在重構(gòu)中的重要地位
1.重構(gòu)時,如何做到有章可循
2.設(shè)計模式概述
3.設(shè)計模式的學(xué)習(xí)階段及特點
4.設(shè)計模式的本質(zhì)論!
5.設(shè)計模式如何適應(yīng)變化和封裝
6.重構(gòu)到模式的思路

內(nèi)容二:實踐---系統(tǒng)中復(fù)雜條件/行為及其動態(tài)變化的應(yīng)對之策
1.分析案例,深入討論下列模式的精髓,及其在重構(gòu)中的實際運用
2.用Strategy替換條件邏輯
3.用Bridge組合動態(tài)變化
4.用State替換狀態(tài)改變條件語句
5.用Composite替換隱含樹
6.用Command替換條件調(diào)度程序
7.重點學(xué)習(xí)案例的重構(gòu)到模式的過程

內(nèi)容三:實踐---如何設(shè)計統(tǒng)一且抽象的抽象的系統(tǒng)
1.分析案例,深入討論下列模式的精髓,及其在重構(gòu)中的實際運用
2.形成Template Method
3.提取Composite
4.用Composite替換一/多之分
5.用Observer替換硬編碼的通知
6.通過Adapter統(tǒng)一接口
7.重點學(xué)習(xí)案例的重構(gòu)到模式的過程

內(nèi)容四:實踐---如何設(shè)計穩(wěn)定的系統(tǒng)——保護(hù)系統(tǒng)的核心不 受變化的影響
1.分析案例,深入討論下列模式的精髓,及其在重構(gòu)中的實際運用
2.用類替換類型代碼
3.將裝飾功能搬移到Decorator
4.用Visitor限制新增功能對流程的影響
5.用Singleton限制實例化
6.引入Null Object
7.轉(zhuǎn)移聚集操作到Collecting Parameter
8.重點學(xué)習(xí)案例的重構(gòu)到模式的過程

內(nèi)容五:實踐------案例練習(xí),模式的綜合運用及分析討論
1.分析案例,深入討論下列模式的精髓,及其在重構(gòu)中的實際運用
2.案例分析,背景介紹
3.找出系統(tǒng)改設(shè)計的關(guān)鍵點
4.用Strategy設(shè)定系統(tǒng)的穩(wěn)定點
5.業(yè)務(wù)邏輯層對功能的引用要點
6.以Abstract Factory模式進(jìn)行初始組裝——兼討論分層的要點
7.以Bridge模式應(yīng)對其他因素的變化
8.以producer - consumer design pattern處理海量數(shù)據(jù)及長任務(wù)
9.重點學(xué)習(xí)案例的重構(gòu)到模式的過程
第六單元 系統(tǒng)與大型系統(tǒng)的演化及重構(gòu)實踐 內(nèi)容一: 架構(gòu)重構(gòu)
1.軟件架構(gòu)概述
2.遺留系統(tǒng)的軟件架構(gòu)恢復(fù)
3.軟件架構(gòu)的重構(gòu)時機(jī)
4.軟件架構(gòu)的重構(gòu)步驟
5.架構(gòu)壞味道
6.架構(gòu)重構(gòu)策略

內(nèi)容二:大型系統(tǒng)的演化及核心技術(shù)
7.應(yīng)用服務(wù)和數(shù)據(jù)服務(wù)分離
8.使用緩存改善數(shù)據(jù)庫瓶頸
9.使用應(yīng)用服務(wù)器集群和負(fù)載均衡避免運用服務(wù)器瓶頸
10.數(shù)據(jù)庫讀寫分離
11.用CDN及分布式文件系統(tǒng)加速系統(tǒng)響應(yīng)
12.分布式數(shù)據(jù)庫系統(tǒng)及NoSQL運用
13.進(jìn)行橫向的業(yè)務(wù)拆分
14.分布式服務(wù),打造自己的軟件生態(tài)環(huán)境

內(nèi)容三:案例分析—某互聯(lián)網(wǎng)項目1架構(gòu)重構(gòu)及演化
1.項目背景以及相關(guān)需求
2.初始上線:當(dāng)前的最佳策略
3.物理部署分離
4.數(shù)據(jù)庫瓶頸的解決1:引入讀寫分離
5.系統(tǒng)開發(fā)框架的更迭
6.系統(tǒng)演化中的走過的彎路1:縱向加強(qiáng)的不歸路
7.數(shù)據(jù)庫瓶頸的解決2:引入搜索引擎
8.引入分布式文件系統(tǒng)
9.引入分布式緩存
10.引入分布式服務(wù)框架,服務(wù)拆分
11.引入分布式消息中間件
12.引入分布式Session框架

內(nèi)容四:案例分析—某互聯(lián)網(wǎng)項目2平臺架構(gòu)重構(gòu)
1.項目背景以及相關(guān)需求
2.從單機(jī)版、簡單網(wǎng)絡(luò)版、分布式網(wǎng)絡(luò)版、重構(gòu)后的大型分布式網(wǎng)絡(luò)版的歷程
3.架構(gòu)設(shè)計及重構(gòu)中的多因素綜合考慮及其影響
4.原有系統(tǒng)的不足分析
5.分布式系統(tǒng)中多中心與單中心的演變過程及博弈分析
6.引入CDN分布式文件服務(wù)系統(tǒng)
7.從數(shù)據(jù)庫中dump,獨立部署圖像服務(wù)器
8.引入Memcache緩存,緩解數(shù)據(jù)庫服務(wù)器
9.引入云服務(wù)與云存儲,及其博弈
10.引入基于lucene的全文檢索,緩解數(shù)據(jù)庫服務(wù)器
11.系統(tǒng)抽象與服務(wù)抽取
12.服務(wù)隔離及負(fù)載均衡:nginx及l(fā)vs運用
13.基礎(chǔ)服務(wù)與運用服務(wù)的抽取與分離
第一單元 認(rèn)識優(yōu)秀的系統(tǒng)及劣質(zhì)系統(tǒng),建立重構(gòu)意識
內(nèi)容一:建立構(gòu)建優(yōu)秀系統(tǒng)的思維
1.優(yōu)秀的系統(tǒng)有什么特征
2.劣質(zhì)代碼有什么特征
3.劣質(zhì)代碼的代價
4.為什么很多程序員都討厭閱讀別人的代碼?
5.如何閱讀別人的系統(tǒng)?
6.如何寫出簡練,易于理解,模塊化,層次性,設(shè)計良好,高效,優(yōu)雅,并且清晰的系統(tǒng)。

內(nèi)容二:軟件系統(tǒng)開始壞死的癥狀
1.硬化Rigidity——系統(tǒng)變得越來越難以變更,修復(fù)或增添新功能的代價高昂;
2.脆弱Fragility——對系統(tǒng)的任何哪怕是微小的變更都可能造成四處(甚至是與變更處沒有邏輯上的關(guān)聯(lián)之處的崩潰;
3.綁死Immobility——抽取系統(tǒng)的任何部分用來復(fù)用都非常困難;
4.膠著Viscosity——以與原有設(shè)計保持一致的方式來對實施變更已經(jīng)非常困難,誘使開發(fā)人員繞過它選擇容易但有害的途徑,其結(jié)果卻使系統(tǒng)死的更快。
5.案例:閱讀一段爛代碼,分析其對系統(tǒng)的危害。

內(nèi)容三:建立重構(gòu)的思想
1.重構(gòu)與添加新功能的關(guān)系。
2.不要在同一個地方跌倒兩次(何時重構(gòu)? 增加新功能時;修補(bǔ)錯誤時;Review碼時一并重構(gòu))
3.重構(gòu)與重寫的取舍(系統(tǒng)實在混亂怎么辦?)
4.如何保證重構(gòu)的正確。
5.代碼、類、組件、子系統(tǒng)、系統(tǒng)、大型分布式系統(tǒng)的重構(gòu)聯(lián)系及區(qū)別
6.重構(gòu)與設(shè)計的關(guān)系
7.通過案例,演示某系統(tǒng)片段,展示重構(gòu)的基本思想(一個好的結(jié)構(gòu)是如何做到系統(tǒng)論的可擴(kuò)展性;以及如何將混亂的代碼重構(gòu)到一個好的結(jié)構(gòu))

內(nèi)容四:案例—通過實際項目演示重構(gòu)
1.介紹項目需求情況,進(jìn)行設(shè)計
2.閱讀代碼指出代碼壞癥狀
3.通過重構(gòu)逐步改善代碼質(zhì)量
第二單元 代碼的壞味道的指標(biāo)及特點,以及應(yīng)對的重構(gòu)之道
內(nèi)容一:重構(gòu)關(guān)鍵—發(fā)現(xiàn)代碼的壞味道
1.模塊的高扇入與低扇出
2.圈復(fù)雜度在項目中的實用價值
3.語句的平均長度——論述其深層含義(函數(shù)不需要故意寫得短小,清晰的代碼自然短??;當(dāng)長則長與當(dāng)短則短)
4.函數(shù)參數(shù)個數(shù)的辯證
5.標(biāo)識參數(shù)----丑陋不堪、駭人聽聞的做法?
6.Ward Cunningham原則——深合己意的例程
7.“每個函數(shù)只做一件事”與“每個函數(shù)一個抽象層級”(程序員往往很難學(xué)會遵循這條規(guī)則,寫出只停留于一個抽象層級上的函數(shù))
8.Switch-case語句——程序設(shè)計的萬惡之源?
9.“指令與查詢分離”的意義。
10.Try/Catch代碼塊
11.重復(fù)的代碼/模塊
12.可以根據(jù)客戶現(xiàn)在的項目作為案例進(jìn)行現(xiàn)場分析,找出相應(yīng)的代碼壞味道

內(nèi)容二:某項目分析----重點了解現(xiàn)實項目代碼的充斥大量壞味道
1.介紹項目需求情況,閱讀現(xiàn)有代碼指出代碼壞癥狀
2.不看不知道,代碼到底有多爛—觸目驚心的代碼
3.通過重構(gòu)逐步改善代碼質(zhì)量
4.本案例學(xué)習(xí)多種重構(gòu)方式
第三單元 重構(gòu)實踐
內(nèi)容一:重構(gòu)初步:識別編碼中的壞味道
1.重復(fù)的代碼
2.過大的類及過長的函數(shù)
3.耦合:依戀情結(jié)、數(shù)據(jù)泥團(tuán)及過度耦合的消息鏈
4.分散的邏輯:發(fā)散的變化及霰彈式的修改
5.復(fù)雜的邏輯:switch現(xiàn)象及平行繼承體系
6.其它:中間人、數(shù)據(jù)類、不佳的繼承

內(nèi)容二:重構(gòu)實踐:面向?qū)ο蠹邦I(lǐng)域驅(qū)動
1.將過程化設(shè)計轉(zhuǎn)化為對象設(shè)計,并討論過程化設(shè)計與對象化設(shè)計的特點及歷史博弈;并給出過程式設(shè)計及及對象設(shè)計的模式——合適的就是好的!
2.封裝值域/自封裝值域的重構(gòu)
3.以數(shù)據(jù)類取代記錄的策略
4.以對象取代數(shù)組的策略
5.以類取代型別碼——Replace Type Code with Class
6.以子類取代型別碼——Replace Type Code with Subclasses
7.以值域取代子類——Replace Subclass with Fields
8.建模為屬性與建模為對象——系統(tǒng)建模中的微妙變化
9.Data Class——純粹的數(shù)據(jù)類
10.以State/Strategy取代型別碼
11.通過案例介紹函數(shù)的重構(gòu)

內(nèi)容三:重構(gòu)實踐—復(fù)雜條件表達(dá)式重構(gòu)
1.常見問題,如何處理讓人瘋狂的復(fù)雜分類?
2.以多態(tài)取代條件式——Replace Conditional with Polymorphism
3.提煉繼承體系——Extract Hierarchy
4.塑造模板函數(shù)——Form Template Method
5.以委托取代繼承——Replace Inheritance with Delegation
6.以繼承取代委托——Replace Delegation with Inheritance
7.用Strategy替換條件邏輯
8.用Bridge組合動態(tài)變化
9.用State替換狀態(tài)改變條件語句
10.用Composite替換隱含樹
11.用Command替換條件調(diào)度程序
12.在多態(tài)體系中,如何處理子條件不一致的情況——繼承體系中的高級技巧。

內(nèi)容四:重構(gòu)實踐—去除“大泥球”式的設(shè)計
1.過大的函數(shù)、模塊、子系統(tǒng)
2.依戀情結(jié)、數(shù)據(jù)泥團(tuán)
3.從系統(tǒng)設(shè)計的角度分析混亂產(chǎn)生的原因
4.通過案例介紹如何分解系統(tǒng)

內(nèi)容五:重構(gòu)實踐—職責(zé)單一
1.一個模塊完成一個職責(zé)——子模塊位于同一個抽象層次
2.功能函數(shù)與邏輯函數(shù)的分離
3.Divergent Change——發(fā)散的變化
1.Shotgun Surgery——散彈槍式的修改
第四單元 重構(gòu)不是萬能的——系統(tǒng)的重構(gòu)及預(yù)先設(shè)計的技巧
內(nèi)容一:重構(gòu)的優(yōu)勢與局限
1.重構(gòu)的優(yōu)勢與局限
2.預(yù)先設(shè)計與重構(gòu)
3.代碼重構(gòu)與系統(tǒng)重構(gòu)的異同
4.逐漸演化的系統(tǒng)及其特點
5.對大型遺留的系統(tǒng)的處理
6.分析某大型系統(tǒng),如何設(shè)計重構(gòu)及逐演化,以及我們在實際項目中何去何從。

內(nèi)容二:什么是好的設(shè)計以及如何預(yù)先設(shè)計實現(xiàn)
1.什么是好的設(shè)計和衡量的手段
2.可伸縮性(Scalable)軟件能夠在用戶的使用率、用戶的數(shù)目增加很快的情況下,保持合理的性能。
3.可擴(kuò)展性(Extensibility)一個軟件系統(tǒng)應(yīng)當(dāng)允許導(dǎo)入新技術(shù)/功能而不引起原有系統(tǒng)大的變化。 結(jié)合案例,通過那些手段如何實現(xiàn)該目標(biāo)
4.靈活性(Flexibility)修改或改進(jìn)一個已投入運行的軟件所需工作量的大小。 結(jié)合案例,通過那些手段如何實現(xiàn)該目標(biāo)
5.可維護(hù)性(maintainability):為滿足用戶新的要求,或當(dāng)環(huán)境發(fā)生了變化或運行中發(fā)現(xiàn)了新的錯誤時,對一個已投入運行的軟件進(jìn)行相應(yīng)診斷和修改所需工作量的大小。
6.可復(fù)用性(Reusability)一個軟件或其部件能再次用于其他應(yīng)用的程度。
7.軟件的變化分析---發(fā)現(xiàn)變化/封裝變化/隔離變化
8.分析真實項目,如何預(yù)先設(shè)計,給我們哪些啟示,我們可以學(xué)習(xí)到什么

內(nèi)容三:系統(tǒng)設(shè)計中的關(guān)鍵因素
1.抽象(Abstraction)、封裝(Encapsulation)和信息隱藏(Information Hiding)
2.分而治之(Divide-And-Conquer)和模塊化(modularization)
3.策略和實現(xiàn)的分離(Separation of Policy and Implementation)
4.接口和實現(xiàn)的分離(Separation of Interface and Implementation)
5.單一引用點(Single Point of Reference)

內(nèi)容四:案例—某項目設(shè)計重構(gòu)案例分析
1.案例情況
2.演示如何發(fā)現(xiàn)設(shè)計壞味道,以及如何重構(gòu)
第五單元 模式與重構(gòu)實踐
內(nèi)容一:模式在重構(gòu)中的重要地位
1.重構(gòu)時,如何做到有章可循
2.設(shè)計模式概述
3.設(shè)計模式的學(xué)習(xí)階段及特點
4.設(shè)計模式的本質(zhì)論!
5.設(shè)計模式如何適應(yīng)變化和封裝
6.重構(gòu)到模式的思路

內(nèi)容二:實踐---系統(tǒng)中復(fù)雜條件/行為及其動態(tài)變化的應(yīng)對之策
1.分析案例,深入討論下列模式的精髓,及其在重構(gòu)中的實際運用
2.用Strategy替換條件邏輯
3.用Bridge組合動態(tài)變化
4.用State替換狀態(tài)改變條件語句
5.用Composite替換隱含樹
6.用Command替換條件調(diào)度程序
7.重點學(xué)習(xí)案例的重構(gòu)到模式的過程

內(nèi)容三:實踐---如何設(shè)計統(tǒng)一且抽象的抽象的系統(tǒng)
1.分析案例,深入討論下列模式的精髓,及其在重構(gòu)中的實際運用
2.形成Template Method
3.提取Composite
4.用Composite替換一/多之分
5.用Observer替換硬編碼的通知
6.通過Adapter統(tǒng)一接口
7.重點學(xué)習(xí)案例的重構(gòu)到模式的過程

內(nèi)容四:實踐---如何設(shè)計穩(wěn)定的系統(tǒng)——保護(hù)系統(tǒng)的核心不 受變化的影響
1.分析案例,深入討論下列模式的精髓,及其在重構(gòu)中的實際運用
2.用類替換類型代碼
3.將裝飾功能搬移到Decorator
4.用Visitor限制新增功能對流程的影響
5.用Singleton限制實例化
6.引入Null Object
7.轉(zhuǎn)移聚集操作到Collecting Parameter
8.重點學(xué)習(xí)案例的重構(gòu)到模式的過程

內(nèi)容五:實踐------案例練習(xí),模式的綜合運用及分析討論
1.分析案例,深入討論下列模式的精髓,及其在重構(gòu)中的實際運用
2.案例分析,背景介紹
3.找出系統(tǒng)改設(shè)計的關(guān)鍵點
4.用Strategy設(shè)定系統(tǒng)的穩(wěn)定點
5.業(yè)務(wù)邏輯層對功能的引用要點
6.以Abstract Factory模式進(jìn)行初始組裝——兼討論分層的要點
7.以Bridge模式應(yīng)對其他因素的變化
8.以producer - consumer design pattern處理海量數(shù)據(jù)及長任務(wù)
9.重點學(xué)習(xí)案例的重構(gòu)到模式的過程
第六單元 系統(tǒng)與大型系統(tǒng)的演化及重構(gòu)實踐
內(nèi)容一: 架構(gòu)重構(gòu)
1.軟件架構(gòu)概述
2.遺留系統(tǒng)的軟件架構(gòu)恢復(fù)
3.軟件架構(gòu)的重構(gòu)時機(jī)
4.軟件架構(gòu)的重構(gòu)步驟
5.架構(gòu)壞味道
6.架構(gòu)重構(gòu)策略

內(nèi)容二:大型系統(tǒng)的演化及核心技術(shù)
7.應(yīng)用服務(wù)和數(shù)據(jù)服務(wù)分離
8.使用緩存改善數(shù)據(jù)庫瓶頸
9.使用應(yīng)用服務(wù)器集群和負(fù)載均衡避免運用服務(wù)器瓶頸
10.數(shù)據(jù)庫讀寫分離
11.用CDN及分布式文件系統(tǒng)加速系統(tǒng)響應(yīng)
12.分布式數(shù)據(jù)庫系統(tǒng)及NoSQL運用
13.進(jìn)行橫向的業(yè)務(wù)拆分
14.分布式服務(wù),打造自己的軟件生態(tài)環(huán)境

內(nèi)容三:案例分析—某互聯(lián)網(wǎng)項目1架構(gòu)重構(gòu)及演化
1.項目背景以及相關(guān)需求
2.初始上線:當(dāng)前的最佳策略
3.物理部署分離
4.數(shù)據(jù)庫瓶頸的解決1:引入讀寫分離
5.系統(tǒng)開發(fā)框架的更迭
6.系統(tǒng)演化中的走過的彎路1:縱向加強(qiáng)的不歸路
7.數(shù)據(jù)庫瓶頸的解決2:引入搜索引擎
8.引入分布式文件系統(tǒng)
9.引入分布式緩存
10.引入分布式服務(wù)框架,服務(wù)拆分
11.引入分布式消息中間件
12.引入分布式Session框架

內(nèi)容四:案例分析—某互聯(lián)網(wǎng)項目2平臺架構(gòu)重構(gòu)
1.項目背景以及相關(guān)需求
2.從單機(jī)版、簡單網(wǎng)絡(luò)版、分布式網(wǎng)絡(luò)版、重構(gòu)后的大型分布式網(wǎng)絡(luò)版的歷程
3.架構(gòu)設(shè)計及重構(gòu)中的多因素綜合考慮及其影響
4.原有系統(tǒng)的不足分析
5.分布式系統(tǒng)中多中心與單中心的演變過程及博弈分析
6.引入CDN分布式文件服務(wù)系統(tǒng)
7.從數(shù)據(jù)庫中dump,獨立部署圖像服務(wù)器
8.引入Memcache緩存,緩解數(shù)據(jù)庫服務(wù)器
9.引入云服務(wù)與云存儲,及其博弈
10.引入基于lucene的全文檢索,緩解數(shù)據(jù)庫服務(wù)器
11.系統(tǒng)抽象與服務(wù)抽取
12.服務(wù)隔離及負(fù)載均衡:nginx及l(fā)vs運用
13.基礎(chǔ)服務(wù)與運用服務(wù)的抽取與分離

課程費用

5800.00 /人

課程時長

2

預(yù)約體驗票 我要分享

近期公開課推薦

近期公開課推薦

活動詳情

提交需求