重構(gòu)與模式

出版時(shí)間:2013-1  出版社:人民郵電出版社  作者:Joshua Kerievsky  頁(yè)數(shù):295  字?jǐn)?shù):444000  
Tag標(biāo)簽:無(wú)  

內(nèi)容概要

  《重構(gòu)與模式(修訂版)》開(kāi)創(chuàng)性地深入揭示了重構(gòu)與模式這兩種軟件開(kāi)發(fā)關(guān)鍵技術(shù)之間的聯(lián)系,說(shuō)明了通過(guò)重構(gòu)實(shí)現(xiàn)模式改善既有的設(shè)計(jì),往往優(yōu)于在新的設(shè)計(jì)早期使用模式。《重構(gòu)與模式(修訂版)》不僅展示了一種應(yīng)用模式和重構(gòu)的創(chuàng)新方法,而且有助于讀者透過(guò)實(shí)戰(zhàn)深入理解重構(gòu)和模式。書中講述了27種重構(gòu)方式?! ?br />  《重構(gòu)與模式(修訂版)》適于面向?qū)ο筌浖_(kāi)發(fā)人員閱讀,也可作為高等學(xué)校計(jì)算機(jī)專業(yè)、軟件工程專業(yè)師生的參考讀物。

作者簡(jiǎn)介

  Joshua Kerievsky
最具人氣的年輕一代軟件開(kāi)發(fā)專家之一,極限編程先驅(qū)、敏捷項(xiàng)目管理的思想領(lǐng)袖、敏捷eLearning的改革者。軟件開(kāi)發(fā)公司Industrial
Logic的創(chuàng)始人。他曾為許多專業(yè)雜志撰稿,并多次在世界級(jí)技術(shù)會(huì)議上擔(dān)任講師,并撰寫了大量的論文。除本書外,他還參與撰寫了Extreme
Programming Explored和Extreme Programming Perspectives兩本書。

書籍目錄

第1章 本書的寫作緣由
1.1 過(guò)度設(shè)計(jì)
1.2 模式萬(wàn)靈丹
1.3 設(shè)計(jì)不足
1.4 測(cè)試驅(qū)動(dòng)開(kāi)發(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)的動(dòng)機(jī)
2.3 眾目睽睽
2.4 可讀性好的代碼
2.5 保持清晰
2.6 循序漸進(jìn)
2.7 設(shè)計(jì)欠賬
2.8 演變出新的架構(gòu)
2.9 復(fù)合重構(gòu)與測(cè)試驅(qū)動(dòng)的重構(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 通過(guò)重構(gòu)實(shí)現(xiàn)、趨向和去除模式
3.5 模式是否會(huì)使代碼更加復(fù)雜
3.6 模式知識(shí)
3.7 使用模式的預(yù)先設(shè)計(jì)
第4章 代碼壞味
4.1 重復(fù)代碼(Duplicated Code)
4.2 過(guò)長(zhǎng)函數(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 過(guò)大的類(Large Class)
4.10 分支語(yǔ)句(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)建知識(shí)搬移到Factory
6.3 用Factory封裝類
6.4 用Factory Method引入多態(tài)創(chuàng)建
6.5 用Builder封裝Composite
6.6 內(nèi)聯(lián)Singleton
第7章 簡(jiǎn)化
7.1 組合方法
7.2 用Strategy替換條件邏輯
7.3 將裝飾功能搬移到Decorator
7.4 用State替換狀態(tài)改變條件語(yǔ)句
7.5 用Composite替換隱含樹(shù)
7.6 用Command替換條件調(diào)度程序
第8章 泛化
8.1 形成Template Method
8.2 提取Composite
8.3 用Composite替換一/多之分
8.4 用Observer替換硬編碼的通知
8.5 通過(guò)Adapter統(tǒng)一接口
8.6 提取Adapter
8.7 用Interpreter替換隱式語(yǔ)言
第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)頁(yè):   插圖:   函數(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)行測(cè)試確保修改后的代碼仍能如愿運(yùn)行。因此,測(cè)試也是復(fù)合重構(gòu)不可分割的一部分。如果不運(yùn)行測(cè)試,你很難充滿自信地應(yīng)用低層次重構(gòu)。 測(cè)試在重構(gòu)中還扮演著一個(gè)完全不同的角色:它可以用來(lái)重新編寫、代替老代碼。測(cè)試驅(qū)動(dòng)的重構(gòu)(test—driven refactoring)包括應(yīng)用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)得到替換代碼,然后將老代碼替換為新代碼(同時(shí)保留并重新運(yùn)行老代碼的測(cè)試)。 與測(cè)試驅(qū)動(dòng)的重構(gòu)相比,復(fù)合重構(gòu)的使用率要高得多,因?yàn)榇罅恐貥?gòu)工作只是改變?cè)写a的位置。當(dāng)這樣無(wú)法改善設(shè)計(jì)時(shí),采用測(cè)試驅(qū)動(dòng)的重構(gòu)能夠幫助我們安全而且有效地得到更佳的設(shè)計(jì)。 替換算法[F]重構(gòu)是最適合使用測(cè)試驅(qū)動(dòng)重構(gòu)方式來(lái)實(shí)現(xiàn)重構(gòu)的絕佳例子。它實(shí)際上是徹底地將原有算法替換為另一個(gè)更簡(jiǎn)單、更清晰的算法。你應(yīng)該怎樣得到新算法呢?通過(guò)將老算法轉(zhuǎn)換為新算法是不行的,因?yàn)樾滤惴ǖ倪壿嬇c之完全不同。可以先編寫好新算法,用它替換老算法,然后看測(cè)試能否通過(guò)。如果測(cè)試無(wú)法通過(guò),你很可能要花上很長(zhǎng)時(shí)間進(jìn)行調(diào)試。編寫算法的更好方式是使用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)。這種方式能夠產(chǎn)生簡(jiǎn)單的代碼,而且還能產(chǎn)生測(cè)試,從而使你或者其他人能夠在此后充滿自信地應(yīng)用各種低層次重構(gòu)或者復(fù)合重構(gòu)。 用Builder封裝Composite(6.5節(jié))重構(gòu)是測(cè)試驅(qū)動(dòng)的重構(gòu)的另一個(gè)例子。這種重構(gòu)的目的是通過(guò)簡(jiǎn)化構(gòu)建過(guò)程使客戶代碼能夠更容易地構(gòu)建Composite。設(shè)計(jì)中使用Builder提供構(gòu)建Composite的簡(jiǎn)化方式。如果設(shè)計(jì)與原有設(shè)計(jì)差距很大,就可能無(wú)法使用多個(gè)低層次重構(gòu)或者復(fù)合重構(gòu)得到新的設(shè)計(jì)。同樣,使用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)能夠更加有效地重新實(shí)現(xiàn)、替換老代碼。 用Composite替換隱含樹(shù)(7.5節(jié))重構(gòu)既是一個(gè)復(fù)合重構(gòu)又是一個(gè)測(cè)試驅(qū)動(dòng)重構(gòu)。選擇如何實(shí)現(xiàn)這個(gè)重構(gòu),取決于所遇到的代碼的性質(zhì)。一般說(shuō)來(lái),如果該代碼很難實(shí)現(xiàn)提煉類[F]重構(gòu),那么測(cè)試驅(qū)動(dòng)重構(gòu)方式可能更容易。用Composite替換隱含樹(shù)重構(gòu)中有一個(gè)使用測(cè)試驅(qū)動(dòng)重構(gòu)的例子。 將裝飾功能搬移Decorator(7.3節(jié))重構(gòu)不是測(cè)試驅(qū)動(dòng)的重構(gòu);但是,這個(gè)重構(gòu)的示例卻說(shuō)明了如何用測(cè)試驅(qū)動(dòng)的重構(gòu)將框架外的行為搬移到框架內(nèi)。這個(gè)示例所涉及的是搬移代碼,因此似乎用復(fù)合重構(gòu)實(shí)現(xiàn)應(yīng)該更方便。但事實(shí)上,修改要涉及更新許多類,最終還是用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)進(jìn)行設(shè)計(jì)轉(zhuǎn)換更容易。 在實(shí)際重構(gòu)中,可能大多數(shù)時(shí)間都在使用低層次重構(gòu)和復(fù)合重構(gòu)。只需要記住,通過(guò)測(cè)試驅(qū)動(dòng)的重構(gòu)完成的“重新實(shí)現(xiàn)和替換”技術(shù),也是重構(gòu)的一種有用方式即可。在設(shè)計(jì)一種新的算法或者機(jī)制時(shí)這種方式最有效,而且這種方式比應(yīng)用低層次重構(gòu)或者復(fù)合重構(gòu)更容易。

媒體關(guān)注與評(píng)論

“重構(gòu)必須付諸實(shí)踐,才能體現(xiàn)出其真正價(jià)值,而非僅僅作為一種抽象的智力練習(xí)。模式則記錄了具有公認(rèn)良好屬性的程序結(jié)構(gòu)。本書將兩者完美地結(jié)合起來(lái)。如果想真正實(shí)踐重構(gòu),我推薦你閱讀本書并活學(xué)活用?!薄狵ent Beck,軟件開(kāi)發(fā)方法學(xué)的泰斗,極限編程創(chuàng)始人,模式先驅(qū)“在《設(shè)計(jì)模式》一書中,我們?cè)?jīng)提到,設(shè)計(jì)模式是重構(gòu)的目標(biāo)。本書終于證實(shí)我們所言不虛。除此之外,本書還能夠加深讀者對(duì)設(shè)計(jì)模式和重構(gòu)兩方面的領(lǐng)悟?!薄狤rich Gamma,IBM公司Eclipse Java開(kāi)發(fā)工具負(fù)責(zé)人,《設(shè)計(jì)模式》四作者之一,模式先驅(qū)“現(xiàn)在,軟件模式和敏捷開(kāi)發(fā)之間的聯(lián)系終于被人道破。”——Ward Cunningham,極限編程創(chuàng)始人,模式先驅(qū),Wiki發(fā)明者“本書展示了一種應(yīng)用模式的創(chuàng)新方法,將自上而下地使用設(shè)計(jì)模式與自下而上地揭示迭代式開(kāi)發(fā)和持續(xù)重構(gòu)結(jié)合起來(lái)。任何職業(yè)軟件開(kāi)發(fā)人員都應(yīng)該使用這種方法,去尋找使用模式改進(jìn)代碼的新的可能?!薄狟obby Woolf,IBM公司W(wǎng)ebSphere軟件服務(wù)部門IT咨詢專家,Enterprise Integration Patterns和The Design Patterns Smalltalk Companion作者之一“Joshua Kerievsky通過(guò)一系列獨(dú)樹(shù)一幟的設(shè)計(jì)級(jí)重構(gòu),將重構(gòu)提升到全新的層次。本書向開(kāi)發(fā)人員展示了如何對(duì)設(shè)計(jì)進(jìn)行改進(jìn),從而簡(jiǎn)化日常工作。本書是重構(gòu)實(shí)踐的珍貴參考書。”——Sven Gorts,重構(gòu)與敏捷開(kāi)發(fā)布道者,比利時(shí)refactoring.be網(wǎng)站創(chuàng)始人“本書是對(duì)《設(shè)計(jì)模式》一書的重構(gòu),可能意義還不僅限于此。在此之前,設(shè)計(jì)模式這一主題一直是作為靜態(tài)和僵化的過(guò)程來(lái)闡述的,本書則將其看做是動(dòng)態(tài)和靈活的,使模式的學(xué)習(xí)變成了一種試驗(yàn)、出錯(cuò)然后改正的人性化過(guò)程,從中讀者能夠理解到,優(yōu)秀的設(shè)計(jì)并非一蹴而就——它們都經(jīng)歷了艱難和反思。Kerievsky還重構(gòu)了闡述方式本身,使其更加清晰,更容易接受。實(shí)際上,他解決了我在寫作Thinking in Patterns一書中遇到的許多組織問(wèn)題。本書透徹地介紹并結(jié)合了測(cè)試、重構(gòu)和設(shè)計(jì)模式諸多方面,字里行間洋溢著敘述的輕松、良好的技術(shù)感覺(jué)和難得的真知灼見(jiàn)?!薄狟ruce Eckel,Mindview公司總裁,《Java編程思想》和《C++編程思想》的作者“我第一次見(jiàn)到Joshua,就對(duì)他在理解、應(yīng)用和教授設(shè)計(jì)模式上表現(xiàn)出來(lái)的熱情留下了深刻印象。偉大的教師對(duì)自己教授的內(nèi)容和如何與人分享都有這樣的熱情。我想Joshua不愧是一位偉大的教師,一位偉大的開(kāi)發(fā)者,我們都從他的深刻洞察中獲益良多?!薄狢raig Larman,Valtech首席科學(xué)家,《UML和模式應(yīng)用》和《敏捷迭代開(kāi)發(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é)合起來(lái)。如果想真正實(shí)踐重構(gòu),我推薦你閱讀本書并活學(xué)活用。 ——Kent Beck,軟件開(kāi)發(fā)方法學(xué)的泰斗,極限編程創(chuàng)始人,模式先驅(qū) 在《設(shè)計(jì)模式》一書中,我們?cè)?jīng)提到,設(shè)計(jì)模式是重構(gòu)的目標(biāo)。本書終于證實(shí)我們所言不虛。除此之外,本書還能夠加深讀者對(duì)設(shè)計(jì)模式和重構(gòu)兩方面的領(lǐng)悟。 ——Erich Gamma,《設(shè)計(jì)模式》作者之一,模式先驅(qū) 現(xiàn)在,軟件模式和敏捷開(kāi)發(fā)之間的聯(lián)系終于被人道破。 ——Ward Cunningham,極限編程創(chuàng)始人,模式先驅(qū),Wiki發(fā)明者 Joshua Kerievsky通過(guò)一系列獨(dú)樹(shù)一幟的設(shè)計(jì)級(jí)重構(gòu),將重構(gòu)提升到全新的層次。本書向開(kāi)發(fā)人員展示了如何對(duì)設(shè)計(jì)進(jìn)行改進(jìn),從而簡(jiǎn)化日常工作。本書是重構(gòu)實(shí)踐的珍貴參考書。 ——Sven Gorts,重構(gòu)與敏捷開(kāi)發(fā)布道者,比利時(shí)refactoring.be網(wǎng)站創(chuàng)始人 我第一次見(jiàn)到Joshua就對(duì)他在理解、應(yīng)用和教授設(shè)計(jì)模式上表現(xiàn)出來(lái)的熱情留下了深刻印象。偉大的教師對(duì)自己教授的內(nèi)容和如何與人分享都有這樣的熱情。我想Joshua不愧是一位偉大的教師,一位偉大的開(kāi)發(fā)者,我們都從他的深刻洞察中獲益良多。 ——Craig Larman,Valtech首席科學(xué)家,《UML和模式應(yīng)用》和《敏捷迭代開(kāi)發(fā)》作者 掌握一門手藝不僅僅要獲得正確的工具,還需要學(xué)會(huì)高效地使用工具。本書闡釋了如何將工業(yè)級(jí)的設(shè)計(jì)工具與藝術(shù)家的技巧熔于一爐。 ——Russ Rufer,硅谷模式討論組創(chuàng)始人 本書是對(duì)《設(shè)計(jì)模式》一書的重構(gòu),可能意義還不僅限于此。在此之前,設(shè)計(jì)模式這一主題一直是作為靜態(tài)和僵化的過(guò)程來(lái)闡述的,本書則將其看做是動(dòng)態(tài)和靈活的,使模式的學(xué)習(xí)變成了一種試驗(yàn)、出錯(cuò)然后改正的人性化過(guò)程,從中讀者能夠理解到,優(yōu)秀的設(shè)計(jì)并非一蹴而就——它們都經(jīng)歷了艱難和反恩。Kerievsky還重構(gòu)了闡述方式本身。使其更加清晰,更容易接受。實(shí)際上,他解決了我在寫作Thinking in Patterns一書中遇到的許多組織問(wèn)題。本書透徹地介紹并結(jié)合了測(cè)試、重構(gòu)和設(shè)計(jì)模式諸多方面,字里行間洋溢著敘述的輕松、良好的技術(shù)感覺(jué)和難得的真知灼見(jiàn)。 ——Bruce Eckel,Mindview公司總裁,《Java編程思想》和《C++編程思想》作者

圖書封面

圖書標(biāo)簽Tags

無(wú)

評(píng)論、評(píng)分、閱讀與下載


    重構(gòu)與模式 PDF格式下載


用戶評(píng)論 (總計(jì)21條)

 
 

  •   正在閱讀中,設(shè)計(jì)模式:可復(fù)用對(duì)象基礎(chǔ) 重構(gòu)與模式 重構(gòu):改善既有代碼設(shè)計(jì)都很推薦
  •   設(shè)計(jì)模式和重構(gòu)都看過(guò)了,收益頗多,再看看這本,也是很多培訓(xùn)老師推薦的
  •   把重構(gòu)和設(shè)計(jì)模式完美結(jié)合
  •   提升代碼設(shè)計(jì)的可重構(gòu)性和可擴(kuò)展性。
  •   這本書比設(shè)計(jì)模式經(jīng)典更詳細(xì),可以作為模式的入門級(jí)書。
  •   才看完前40頁(yè),年紀(jì)大了,看書時(shí)間少,正在努力中....
  •   剛看了幾章,很有啟發(fā)。有一些經(jīng)驗(yàn)的人看,體會(huì)更深
  •   印刷不錯(cuò) 但是送來(lái)的時(shí)候封面臟死了 打包要注意?。。。?/li>
  •   不錯(cuò) 書很不錯(cuò)
  •   就猜會(huì)重印了!就等著呢!
  •   對(duì)重構(gòu)與模式間的關(guān)系講解很到位!就是書本裝訂感覺(jué)有點(diǎn)不太好,封面太硬、頁(yè)與頁(yè)之間太緊湊了??粗粗疽幌伦詣?dòng)合上了......
  •   翻了下書的內(nèi)容還不錯(cuò),值得學(xué)習(xí)和探究的東西很多,就是紙張不是特別好
  •   書到了沒(méi)細(xì)看,感覺(jué)還可以,就是例子是JAVA的,本人不搞JAVA。
  •   書有磨損,臟
  •   內(nèi)容蠻好的,只不過(guò)需要一定的Java基礎(chǔ),想學(xué)C++的重構(gòu)還是不要買這個(gè)
  •   很好很耐看,經(jīng)典教程
  •   對(duì)我的項(xiàng)目非常有幫助,實(shí)際應(yīng)用指導(dǎo)性強(qiáng)
  •   很有必要看的一本書,值得一看
  •   書內(nèi)容很好。但是送來(lái)的書是壞的,從中間裂開(kāi),最后換了一本,服務(wù)態(tài)度還挺好
  •   老版本的重構(gòu)與模式已經(jīng)買不到了,只能買這個(gè)版本,非常經(jīng)典
  •   重構(gòu)與模式(修訂版)
 

250萬(wàn)本中文圖書簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7