出版時(shí)間:2013-1 出版社:人民郵電出版社 作者:Joshua Kerievsky 頁數(shù):295 字?jǐn)?shù):444000
Tag標(biāo)簽:無
內(nèi)容概要
《重構(gòu)與模式(修訂版)》開創(chuàng)性地深入揭示了重構(gòu)與模式這兩種軟件開發(fā)關(guān)鍵技術(shù)之間的聯(lián)系,說明了通過重構(gòu)實(shí)現(xiàn)模式改善既有的設(shè)計(jì),往往優(yōu)于在新的設(shè)計(jì)早期使用模式?!吨貥?gòu)與模式(修訂版)》不僅展示了一種應(yīng)用模式和重構(gòu)的創(chuàng)新方法,而且有助于讀者透過實(shí)戰(zhàn)深入理解重構(gòu)和模式。書中講述了27種重構(gòu)方式?! ?br /> 《重構(gòu)與模式(修訂版)》適于面向?qū)ο筌浖_發(fā)人員閱讀,也可作為高等學(xué)校計(jì)算機(jī)專業(yè)、軟件工程專業(yè)師生的參考讀物。
作者簡介
Joshua Kerievsky
最具人氣的年輕一代軟件開發(fā)專家之一,極限編程先驅(qū)、敏捷項(xiàng)目管理的思想領(lǐng)袖、敏捷eLearning的改革者。軟件開發(fā)公司Industrial
Logic的創(chuàng)始人。他曾為許多專業(yè)雜志撰稿,并多次在世界級技術(shù)會議上擔(dān)任講師,并撰寫了大量的論文。除本書外,他還參與撰寫了Extreme
Programming Explored和Extreme Programming Perspectives兩本書。
書籍目錄
第1章 本書的寫作緣由
1.1 過度設(shè)計(jì)
1.2 模式萬靈丹
1.3 設(shè)計(jì)不足
1.4 測試驅(qū)動開發(fā)和持續(xù)重構(gòu)
1.5 重構(gòu)與模式
1.6 演進(jìn)式設(shè)計(jì)
第2章 重構(gòu)
2.1 何謂重構(gòu)
2.2 重構(gòu)的動機(jī)
2.3 眾目睽睽
2.4 可讀性好的代碼
2.5 保持清晰
2.6 循序漸進(jìn)
2.7 設(shè)計(jì)欠賬
2.8 演變出新的架構(gòu)
2.9 復(fù)合重構(gòu)與測試驅(qū)動的重構(gòu)
2.10 復(fù)合重構(gòu)的優(yōu)點(diǎn)
2.11 重構(gòu)工具
第3章 模式
3.1 何謂模式
3.2 模式癡迷
3.3 實(shí)現(xiàn)模式的方式不止一種
3.4 通過重構(gòu)實(shí)現(xiàn)、趨向和去除模式
3.5 模式是否會使代碼更加復(fù)雜
3.6 模式知識
3.7 使用模式的預(yù)先設(shè)計(jì)
第4章 代碼壞味
4.1 重復(fù)代碼(Duplicated Code)
4.2 過長函數(shù)(Long Method)
4.3 條件邏輯太復(fù)雜(Conditional Complexity)
4.4 基本類型偏執(zhí)(Primitive Obsession)
4.5 不恰當(dāng)?shù)谋┞叮↖ndecent Exposure)
4.6 解決方案蔓延(Solution Sprawl)
4.7 異曲同工的類(Alternative Classes with Different
Interfaces)
4.8 冗贅類(Lazy Class)
4.9 過大的類(Large Class)
4.10 分支語句(Switch Statement)
4.11 組合爆炸(Combinatorial Explosion)
4.12 怪異解決方案(Oddball Solution)
第5章 模式導(dǎo)向的重構(gòu)目錄
5.1 重構(gòu)的格式
5.2 本目錄中引用的項(xiàng)目
5.3 起點(diǎn)
5.4 學(xué)習(xí)順序
第6章 創(chuàng)建
6.1 用Creation Method替換構(gòu)造函數(shù)
6.2 將創(chuàng)建知識搬移到Factory
6.3 用Factory封裝類
6.4 用Factory Method引入多態(tài)創(chuàng)建
6.5 用Builder封裝Composite
6.6 內(nèi)聯(lián)Singleton
第7章 簡化
7.1 組合方法
7.2 用Strategy替換條件邏輯
7.3 將裝飾功能搬移到Decorator
7.4 用State替換狀態(tài)改變條件語句
7.5 用Composite替換隱含樹
7.6 用Command替換條件調(diào)度程序
第8章 泛化
8.1 形成Template Method
8.2 提取Composite
8.3 用Composite替換一/多之分
8.4 用Observer替換硬編碼的通知
8.5 通過Adapter統(tǒng)一接口
8.6 提取Adapter
8.7 用Interpreter替換隱式語言
第9章 保護(hù)
9.1 用類替換類型代碼
9.2 用Singleton限制實(shí)例化
9.3 引入Null Object
第10章 聚集操作
10.1 將聚集操作搬移到Collecting Parameter
10.2 將聚集操作搬移到Visitor
第11章 實(shí)用重構(gòu)
11.1 鏈構(gòu)造函數(shù)
11.2 統(tǒng)一接口
11.3 提取參數(shù)
跋
參考文獻(xiàn)
索引
章節(jié)摘錄
版權(quán)頁: 插圖: 函數(shù)上移[F]重構(gòu)需要將方法從子類搬移到超類,提煉類[F]重構(gòu)需要將代碼搬移到新類中,而搬移函數(shù)[F]重構(gòu)需要將函數(shù)從一個(gè)類搬移到另一個(gè)類。 本書中講述的幾乎所有重構(gòu)都是復(fù)合重構(gòu)。我們從一段待修改的代碼著手,然后漸進(jìn)地應(yīng)用各種低層次重構(gòu),直至完成所需的修改。在應(yīng)用各個(gè)低層次重構(gòu)之間,需要運(yùn)行測試確保修改后的代碼仍能如愿運(yùn)行。因此,測試也是復(fù)合重構(gòu)不可分割的一部分。如果不運(yùn)行測試,你很難充滿自信地應(yīng)用低層次重構(gòu)。 測試在重構(gòu)中還扮演著一個(gè)完全不同的角色:它可以用來重新編寫、代替老代碼。測試驅(qū)動的重構(gòu)(test—driven refactoring)包括應(yīng)用測試驅(qū)動開發(fā)得到替換代碼,然后將老代碼替換為新代碼(同時(shí)保留并重新運(yùn)行老代碼的測試)。 與測試驅(qū)動的重構(gòu)相比,復(fù)合重構(gòu)的使用率要高得多,因?yàn)榇罅恐貥?gòu)工作只是改變原有代碼的位置。當(dāng)這樣無法改善設(shè)計(jì)時(shí),采用測試驅(qū)動的重構(gòu)能夠幫助我們安全而且有效地得到更佳的設(shè)計(jì)。 替換算法[F]重構(gòu)是最適合使用測試驅(qū)動重構(gòu)方式來實(shí)現(xiàn)重構(gòu)的絕佳例子。它實(shí)際上是徹底地將原有算法替換為另一個(gè)更簡單、更清晰的算法。你應(yīng)該怎樣得到新算法呢?通過將老算法轉(zhuǎn)換為新算法是不行的,因?yàn)樾滤惴ǖ倪壿嬇c之完全不同??梢韵染帉懞眯滤惴ǎ盟鎿Q老算法,然后看測試能否通過。如果測試無法通過,你很可能要花上很長時(shí)間進(jìn)行調(diào)試。編寫算法的更好方式是使用測試驅(qū)動開發(fā)。這種方式能夠產(chǎn)生簡單的代碼,而且還能產(chǎn)生測試,從而使你或者其他人能夠在此后充滿自信地應(yīng)用各種低層次重構(gòu)或者復(fù)合重構(gòu)。 用Builder封裝Composite(6.5節(jié))重構(gòu)是測試驅(qū)動的重構(gòu)的另一個(gè)例子。這種重構(gòu)的目的是通過簡化構(gòu)建過程使客戶代碼能夠更容易地構(gòu)建Composite。設(shè)計(jì)中使用Builder提供構(gòu)建Composite的簡化方式。如果設(shè)計(jì)與原有設(shè)計(jì)差距很大,就可能無法使用多個(gè)低層次重構(gòu)或者復(fù)合重構(gòu)得到新的設(shè)計(jì)。同樣,使用測試驅(qū)動開發(fā)能夠更加有效地重新實(shí)現(xiàn)、替換老代碼。 用Composite替換隱含樹(7.5節(jié))重構(gòu)既是一個(gè)復(fù)合重構(gòu)又是一個(gè)測試驅(qū)動重構(gòu)。選擇如何實(shí)現(xiàn)這個(gè)重構(gòu),取決于所遇到的代碼的性質(zhì)。一般說來,如果該代碼很難實(shí)現(xiàn)提煉類[F]重構(gòu),那么測試驅(qū)動重構(gòu)方式可能更容易。用Composite替換隱含樹重構(gòu)中有一個(gè)使用測試驅(qū)動重構(gòu)的例子。 將裝飾功能搬移Decorator(7.3節(jié))重構(gòu)不是測試驅(qū)動的重構(gòu);但是,這個(gè)重構(gòu)的示例卻說明了如何用測試驅(qū)動的重構(gòu)將框架外的行為搬移到框架內(nèi)。這個(gè)示例所涉及的是搬移代碼,因此似乎用復(fù)合重構(gòu)實(shí)現(xiàn)應(yīng)該更方便。但事實(shí)上,修改要涉及更新許多類,最終還是用測試驅(qū)動開發(fā)進(jìn)行設(shè)計(jì)轉(zhuǎn)換更容易。 在實(shí)際重構(gòu)中,可能大多數(shù)時(shí)間都在使用低層次重構(gòu)和復(fù)合重構(gòu)。只需要記住,通過測試驅(qū)動的重構(gòu)完成的“重新實(shí)現(xiàn)和替換”技術(shù),也是重構(gòu)的一種有用方式即可。在設(shè)計(jì)一種新的算法或者機(jī)制時(shí)這種方式最有效,而且這種方式比應(yīng)用低層次重構(gòu)或者復(fù)合重構(gòu)更容易。
媒體關(guān)注與評論
“重構(gòu)必須付諸實(shí)踐,才能體現(xiàn)出其真正價(jià)值,而非僅僅作為一種抽象的智力練習(xí)。模式則記錄了具有公認(rèn)良好屬性的程序結(jié)構(gòu)。本書將兩者完美地結(jié)合起來。如果想真正實(shí)踐重構(gòu),我推薦你閱讀本書并活學(xué)活用?!薄狵ent Beck,軟件開發(fā)方法學(xué)的泰斗,極限編程創(chuàng)始人,模式先驅(qū)“在《設(shè)計(jì)模式》一書中,我們曾經(jīng)提到,設(shè)計(jì)模式是重構(gòu)的目標(biāo)。本書終于證實(shí)我們所言不虛。除此之外,本書還能夠加深讀者對設(shè)計(jì)模式和重構(gòu)兩方面的領(lǐng)悟?!薄狤rich Gamma,IBM公司Eclipse Java開發(fā)工具負(fù)責(zé)人,《設(shè)計(jì)模式》四作者之一,模式先驅(qū)“現(xiàn)在,軟件模式和敏捷開發(fā)之間的聯(lián)系終于被人道破?!薄猈ard Cunningham,極限編程創(chuàng)始人,模式先驅(qū),Wiki發(fā)明者“本書展示了一種應(yīng)用模式的創(chuàng)新方法,將自上而下地使用設(shè)計(jì)模式與自下而上地揭示迭代式開發(fā)和持續(xù)重構(gòu)結(jié)合起來。任何職業(yè)軟件開發(fā)人員都應(yīng)該使用這種方法,去尋找使用模式改進(jìn)代碼的新的可能。”——Bobby Woolf,IBM公司W(wǎng)ebSphere軟件服務(wù)部門IT咨詢專家,Enterprise Integration Patterns和The Design Patterns Smalltalk Companion作者之一“Joshua Kerievsky通過一系列獨(dú)樹一幟的設(shè)計(jì)級重構(gòu),將重構(gòu)提升到全新的層次。本書向開發(fā)人員展示了如何對設(shè)計(jì)進(jìn)行改進(jìn),從而簡化日常工作。本書是重構(gòu)實(shí)踐的珍貴參考書?!薄猄ven Gorts,重構(gòu)與敏捷開發(fā)布道者,比利時(shí)refactoring.be網(wǎng)站創(chuàng)始人“本書是對《設(shè)計(jì)模式》一書的重構(gòu),可能意義還不僅限于此。在此之前,設(shè)計(jì)模式這一主題一直是作為靜態(tài)和僵化的過程來闡述的,本書則將其看做是動態(tài)和靈活的,使模式的學(xué)習(xí)變成了一種試驗(yàn)、出錯(cuò)然后改正的人性化過程,從中讀者能夠理解到,優(yōu)秀的設(shè)計(jì)并非一蹴而就——它們都經(jīng)歷了艱難和反思。Kerievsky還重構(gòu)了闡述方式本身,使其更加清晰,更容易接受。實(shí)際上,他解決了我在寫作Thinking in Patterns一書中遇到的許多組織問題。本書透徹地介紹并結(jié)合了測試、重構(gòu)和設(shè)計(jì)模式諸多方面,字里行間洋溢著敘述的輕松、良好的技術(shù)感覺和難得的真知灼見?!薄狟ruce Eckel,Mindview公司總裁,《Java編程思想》和《C++編程思想》的作者“我第一次見到Joshua,就對他在理解、應(yīng)用和教授設(shè)計(jì)模式上表現(xiàn)出來的熱情留下了深刻印象。偉大的教師對自己教授的內(nèi)容和如何與人分享都有這樣的熱情。我想Joshua不愧是一位偉大的教師,一位偉大的開發(fā)者,我們都從他的深刻洞察中獲益良多?!薄狢raig Larman,Valtech首席科學(xué)家,《UML和模式應(yīng)用》和《敏捷迭代開發(fā)》作者
編輯推薦
講述重構(gòu)與設(shè)計(jì)模式兩大熱門技術(shù),將兩者有機(jī)結(jié)合,極具實(shí)戰(zhàn)價(jià)值,業(yè)界專家學(xué)習(xí)和教授重構(gòu)與模式親身經(jīng)歷的結(jié)晶,《設(shè)計(jì)模式》作者Erich Gamma、Ralph Johnson和《重構(gòu)》作者M(jìn)artin Fowler聯(lián)合推薦。
名人推薦
重構(gòu)必須付諸實(shí)踐,才能體現(xiàn)出其真正價(jià)值,而非僅僅作為一種抽象的智力練習(xí)。模式則記錄了具有公認(rèn)的良好屬性的程序結(jié)構(gòu)。本書將兩者完美地結(jié)合起來。如果想真正實(shí)踐重構(gòu),我推薦你閱讀本書并活學(xué)活用。 ——Kent Beck,軟件開發(fā)方法學(xué)的泰斗,極限編程創(chuàng)始人,模式先驅(qū) 在《設(shè)計(jì)模式》一書中,我們曾經(jīng)提到,設(shè)計(jì)模式是重構(gòu)的目標(biāo)。本書終于證實(shí)我們所言不虛。除此之外,本書還能夠加深讀者對設(shè)計(jì)模式和重構(gòu)兩方面的領(lǐng)悟。 ——Erich Gamma,《設(shè)計(jì)模式》作者之一,模式先驅(qū) 現(xiàn)在,軟件模式和敏捷開發(fā)之間的聯(lián)系終于被人道破。 ——Ward Cunningham,極限編程創(chuàng)始人,模式先驅(qū),Wiki發(fā)明者 Joshua Kerievsky通過一系列獨(dú)樹一幟的設(shè)計(jì)級重構(gòu),將重構(gòu)提升到全新的層次。本書向開發(fā)人員展示了如何對設(shè)計(jì)進(jìn)行改進(jìn),從而簡化日常工作。本書是重構(gòu)實(shí)踐的珍貴參考書。 ——Sven Gorts,重構(gòu)與敏捷開發(fā)布道者,比利時(shí)refactoring.be網(wǎng)站創(chuàng)始人 我第一次見到Joshua就對他在理解、應(yīng)用和教授設(shè)計(jì)模式上表現(xiàn)出來的熱情留下了深刻印象。偉大的教師對自己教授的內(nèi)容和如何與人分享都有這樣的熱情。我想Joshua不愧是一位偉大的教師,一位偉大的開發(fā)者,我們都從他的深刻洞察中獲益良多。 ——Craig Larman,Valtech首席科學(xué)家,《UML和模式應(yīng)用》和《敏捷迭代開發(fā)》作者 掌握一門手藝不僅僅要獲得正確的工具,還需要學(xué)會高效地使用工具。本書闡釋了如何將工業(yè)級的設(shè)計(jì)工具與藝術(shù)家的技巧熔于一爐。 ——Russ Rufer,硅谷模式討論組創(chuàng)始人 本書是對《設(shè)計(jì)模式》一書的重構(gòu),可能意義還不僅限于此。在此之前,設(shè)計(jì)模式這一主題一直是作為靜態(tài)和僵化的過程來闡述的,本書則將其看做是動態(tài)和靈活的,使模式的學(xué)習(xí)變成了一種試驗(yàn)、出錯(cuò)然后改正的人性化過程,從中讀者能夠理解到,優(yōu)秀的設(shè)計(jì)并非一蹴而就——它們都經(jīng)歷了艱難和反恩。Kerievsky還重構(gòu)了闡述方式本身。使其更加清晰,更容易接受。實(shí)際上,他解決了我在寫作Thinking in Patterns一書中遇到的許多組織問題。本書透徹地介紹并結(jié)合了測試、重構(gòu)和設(shè)計(jì)模式諸多方面,字里行間洋溢著敘述的輕松、良好的技術(shù)感覺和難得的真知灼見。 ——Bruce Eckel,Mindview公司總裁,《Java編程思想》和《C++編程思想》作者
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載