重構(gòu)(Ruby版)

出版時(shí)間:2010  出版社:機(jī)械工業(yè)出版社  作者:Jay Fields,Shane Harvie,Martin Fowler  頁(yè)數(shù):294  譯者:徐旭銘  
Tag標(biāo)簽:無(wú)  

前言

  差不多十年前,我(Martin)曾經(jīng)和Kent Beck一起做過(guò)一個(gè)項(xiàng)目。這個(gè)項(xiàng)目的名字叫C3,它后來(lái)成為極限編程誕生的標(biāo)志性項(xiàng)目,并幫助我們看清了敏捷軟件運(yùn)動(dòng)的方向。  我們從那個(gè)項(xiàng)目里學(xué)到了很多東西,不過(guò)真正震撼到我的是Kent那種有條不紊、持續(xù)不斷改進(jìn)系統(tǒng)設(shè)計(jì)的風(fēng)格。一直以來(lái)我對(duì)編寫(xiě)干凈的代碼都抱有極大的熱情,堅(jiān)信花時(shí)間去清理有問(wèn)題的代碼,以便讓團(tuán)隊(duì)能更快捷地開(kāi)發(fā)功能是非常有價(jià)值的事情。而Kent向我介紹了一種很多頂尖Smalltalk程序員使用的技術(shù),它能讓我的工作效率成倍提升。這是一種他們稱(chēng)之為重構(gòu)的技術(shù),我很快就變得想要在任何場(chǎng)合下都把它介紹給別人。但是市面上沒(méi)有任何出版物或是類(lèi)似的資源可以讓我指引人們?nèi)プ约簩W(xué)習(xí)這項(xiàng)技術(shù)。既然Kent和其他Smalltalk程序員都沒(méi)意愿要寫(xiě)一本,所以我就決定自己動(dòng)手了?! 〗Y(jié)果我的那本《重構(gòu)》大受歡迎,在重構(gòu)成為主流技術(shù)的過(guò)程中看起來(lái)還扮演了相當(dāng)重要的角色。隨著近年來(lái)Ruby的興起,給這本書(shū)寫(xiě)一本Ruby版是很有意義的,為此我拉來(lái)了Jay和Shane?! ∈裁词侵貥?gòu)  重構(gòu)是改變軟件系統(tǒng)的過(guò)程,它不會(huì)改變代碼的外部行為,但是可以改善其內(nèi)部結(jié)構(gòu)。它清理代碼的嚴(yán)謹(jǐn)方式能把引入bug的風(fēng)險(xiǎn)降至最低?;旧袭?dāng)你進(jìn)行重構(gòu)的時(shí)候,就意味著代碼的設(shè)計(jì)在完成時(shí)會(huì)得到改善?! 『芏嗳擞X(jué)得“代碼的設(shè)計(jì)在完成時(shí)會(huì)得到改善”這種說(shuō)法相當(dāng)古怪。多年來(lái)大多數(shù)人都相信設(shè)計(jì)第一、編碼第二的原則。而隨著時(shí)間的推移,不斷修改代碼以及系統(tǒng)的完整性后,原本設(shè)計(jì)的結(jié)構(gòu)也會(huì)慢慢變得模糊。代碼逐漸從一項(xiàng)工程活動(dòng)淪落為敲敲打打的修補(bǔ)工作。  重構(gòu)與此正好相反。有了重構(gòu),你可以把一個(gè)糟糕甚至混亂的設(shè)計(jì),逐漸轉(zhuǎn)變成設(shè)計(jì)良好的代碼。每一個(gè)步驟都非常簡(jiǎn)單,甚至有點(diǎn)過(guò)分簡(jiǎn)單了。比如把一個(gè)實(shí)例變量從一個(gè)類(lèi)移到另一個(gè)類(lèi),從一個(gè)方法里抽出一些代碼單獨(dú)放到一個(gè)方法里去,以及在層次體系之間移動(dòng)一些代碼等。但是這些小改動(dòng)累積起來(lái)卻能夠徹底改進(jìn)設(shè)計(jì)。這和通常認(rèn)為的軟件衰敗論的觀念是完全相反的?! ≡谥貥?gòu)的時(shí)候你會(huì)發(fā)現(xiàn)工作的重心發(fā)生了變化。設(shè)計(jì)不再是最先進(jìn)行,而是在開(kāi)發(fā)過(guò)程中不斷進(jìn)行的。你會(huì)從構(gòu)建系統(tǒng)中學(xué)習(xí)到如何改進(jìn)設(shè)計(jì)。這種交互能讓程序的設(shè)計(jì)隨著開(kāi)發(fā)工作的進(jìn)行一直保持在較好的水準(zhǔn)上。

內(nèi)容概要

  本書(shū)是一本專(zhuān)門(mén)為職業(yè)Ruby程序員編寫(xiě)的重構(gòu)指導(dǎo)。它的目標(biāo)是向你展示如何以一種既受到嚴(yán)格控制又高效的方式進(jìn)行重構(gòu)。你將學(xué)習(xí)到不在代碼中引入bug并能按部就班改進(jìn)結(jié)構(gòu)的重構(gòu)方式。本書(shū)的主要內(nèi)容:第1章指出重構(gòu)是什么;第2章討論進(jìn)行重構(gòu)的理由;第3章指出需要進(jìn)行重構(gòu)的信號(hào);第4章討論測(cè)試在重構(gòu)中扮演的重要角色;第5章~第12章介紹了重構(gòu)花名冊(cè),它包含了在重構(gòu)領(lǐng)域里到目前為止的成果。當(dāng)需要進(jìn)行某項(xiàng)任務(wù)時(shí),這份花名冊(cè)可以手把手地提醒我們安全的做法?! ”緯?shū)是對(duì)Martin Fowler的經(jīng)典權(quán)威著作《重構(gòu)》的重大更新版,并以Ruby為例徹底重寫(xiě)——并非只是把代碼從Java版中搬過(guò)來(lái)而已?! ?shū)中給出了一份詳細(xì)的重構(gòu)花名冊(cè),包含超過(guò)70條經(jīng)過(guò)錘煉的Ruby重構(gòu)技術(shù),每一條都有詳細(xì)指引、使用細(xì)節(jié)和范例代碼。其中很多重構(gòu)技術(shù)都用到了Ruby專(zhuān)有的強(qiáng)大特性,你可以從華章網(wǎng)站下載到全部代碼。  作者借用Fowler最初的想法,展示了如何以一種受控、高效以及迭代的方式進(jìn)行重構(gòu),幫助你有條不紊地改善代碼的質(zhì)量而不會(huì)引入新的bug。不論是編寫(xiě)還是維護(hù)Ruby代碼,本書(shū)都將是不可或缺的重要參考?! ”緯?shū)內(nèi)容  理解重構(gòu)的核心原則,以及進(jìn)行重構(gòu)的原因  發(fā)現(xiàn)Ruby代碼中的“壞味道”  逐步將糟糕的設(shè)計(jì)轉(zhuǎn)變成設(shè)計(jì)精良的代碼  構(gòu)建測(cè)試以便保證重構(gòu)正確進(jìn)行  理解重構(gòu)中的難點(diǎn)以及克服的辦法  編寫(xiě)正確包裝代碼的方法  在對(duì)象之間移動(dòng)特性,將其放在最適合的地方  將數(shù)據(jù)組織成更容易處理的形式  簡(jiǎn)化條件表達(dá)式,更高效地利用多態(tài)  創(chuàng)建更易于理解和使用的接口  進(jìn)行大型重構(gòu),這將可能影響整個(gè)軟件系統(tǒng)數(shù)月乃至數(shù)年  成功重構(gòu)Ruby on Rails代碼

作者簡(jiǎn)介

  Jay Fields 是DRW Trading公司的一名軟件程序員,也是一位研討會(huì)的常客。Jay對(duì)發(fā)現(xiàn)和成熟化創(chuàng)新式解決方案總是抱有激情。Jay的個(gè)人網(wǎng)站是:www.jayfields.com。
Shane Harvie 在美國(guó)、印度和澳大利亞等國(guó)的敏捷公司中從事軟件開(kāi)發(fā)工作。他現(xiàn)在位于芝加哥的DRW Trading

書(shū)籍目錄

譯者序 序 前言 致謝 第1章 重構(gòu)初體驗(yàn)  1.1 起點(diǎn)   1.1.1 Movie   1.1.2 Rental   1.1.3 Customer   1.1.4 對(duì)起始程序的評(píng)價(jià)  1.2 重構(gòu)第一步  1.3 Statement方法的分解和再組合   1.3.1 移動(dòng)Amount的計(jì)算   1.3.2 提煉??头e分的計(jì)算   1.3.3 移除臨時(shí)變量  1.4 用多態(tài)替換價(jià)格代碼中的條件邏輯  1.5 小結(jié) 第2章 重構(gòu)的基本原理  2.1 重構(gòu)的起源  2.2 重構(gòu)的定義  2.3 重構(gòu)的理由   2.3.1 重構(gòu)可以改進(jìn)軟件的設(shè)計(jì)   2.3.2 重構(gòu)讓軟件變得易于理解   2.3.3 重構(gòu)可以幫助你發(fā)現(xiàn)bug   2.3.4 重構(gòu)可以幫助你更快地編程  2.4 重構(gòu)的時(shí)機(jī)   2.4.1 事不過(guò)三   2.4.2 在添加功能時(shí)重構(gòu)   2.4.3 在需要修復(fù)bug時(shí)重構(gòu)   2.4.4 在進(jìn)行代碼復(fù)審時(shí)重構(gòu)   2.4.5 為了更好地理解而重構(gòu)(或者說(shuō),向著同一個(gè)目標(biāo)進(jìn)行重構(gòu))  2.5 為什么重構(gòu)能起作用  2.6 我怎么跟經(jīng)理說(shuō)  2.7 抽象和重構(gòu)  2.8 重構(gòu)的問(wèn)題   2.8.1 改變接口   2.8.2 數(shù)據(jù)庫(kù)   2.8.3 難以重構(gòu)的設(shè)計(jì)變化   2.8.4 什么時(shí)候不應(yīng)該重構(gòu)  2.9 重構(gòu)和設(shè)計(jì)  2.10 竹籃打水一場(chǎng)空  2.11 重構(gòu)和性能  2.12 優(yōu)化薪資系統(tǒng) 第3章 代碼里的壞味道  3.1 重復(fù)代碼  3.2 方法過(guò)長(zhǎng)  3.3 類(lèi)太大  3.4 參數(shù)列表太長(zhǎng)  3.5 發(fā)散型變化  3.6 霰彈型修改  3.7 特性依賴(lài)  3.8 數(shù)據(jù)泥團(tuán)  3.9 基本類(lèi)型偏執(zhí)  3.10 case語(yǔ)句  3.11 平行繼承體系  3.12 冗贅類(lèi)  3.13 純臆測(cè)的泛化  3.14 臨時(shí)字段  3.15 消息鏈  3.16 中間人  3.17 過(guò)分親密  3.18 異曲同工的類(lèi)  3.19 不完善的類(lèi)庫(kù)  3.20 數(shù)據(jù)類(lèi)  3.21 被拒絕的遺贈(zèng)  3.22 注釋  3.23 狂熱的元編程  3.24 脫節(jié)的API  3.25 不斷重復(fù)的樣板文本 第4章 構(gòu)建測(cè)試 第5章 重構(gòu)花名冊(cè)第6章 組織方法 第7章 在對(duì)象之間移動(dòng)特性第8章 組織數(shù)據(jù)

章節(jié)摘錄

  第1章重構(gòu)初體驗(yàn)  還記得在編寫(xiě)《重構(gòu)》第1版的時(shí)候我曾經(jīng)決定必須這樣寫(xiě)這個(gè)開(kāi)頭。傳統(tǒng)意義上的技術(shù)書(shū)籍通常都會(huì)先進(jìn)行一段基本介紹,例如歷史和基本原理等??僧?dāng)有人在會(huì)議上這么干的時(shí)候,我總是會(huì)昏昏欲睡。我會(huì)一直心不在焉、似聽(tīng)非聽(tīng)地看著演講人,直到他給出一個(gè)具體的實(shí)例為止。這時(shí)我才能回過(guò)神來(lái),搞明白他究竟在說(shuō)什么。原理這種東西很容易說(shuō)得太寬泛,讓人無(wú)法理解怎么才能將它運(yùn)用于實(shí)際。有時(shí)候舉個(gè)例子就能把話講明白?! ∫虼耍谶@本書(shū)中我決定先給出一個(gè)重構(gòu)的實(shí)例。幾位審閱者覺(jué)得這么做頗不尋常,甚至可以說(shuō)相當(dāng)大膽。但是我從來(lái)都沒(méi)有后悔過(guò)。在很多其他場(chǎng)合談?wù)撝貥?gòu)的時(shí)候我也都會(huì)用到這個(gè)例子,我發(fā)覺(jué)用舉例來(lái)開(kāi)頭其實(shí)是很不錯(cuò)的主意。雖然例子中有些細(xì)節(jié)相當(dāng)具體,但是你可以通過(guò)具體的實(shí)例來(lái)展現(xiàn)很多普遍的問(wèn)題?! 『翢o(wú)例外,這本Ruby版也將會(huì)以一個(gè)例子來(lái)開(kāi)頭。在這里我用的是和Java版一樣的那個(gè)例子,雖然Jay已經(jīng)把它變成Ruby版了。多年來(lái)我一直在談?wù)撨@個(gè)例子,在這個(gè)過(guò)程中我又有了一些新的領(lǐng)悟,因此我在重新組織這段內(nèi)容的時(shí)候也相應(yīng)地做了很多修改。就算你對(duì)這本書(shū)已經(jīng)很熟悉了,我們也希望你能從中讀到一點(diǎn)新的東西。如果這是你第一次閱讀本書(shū),那么可以從頭讀起?! 〔贿^(guò)所有的介紹性例子都要面對(duì)一個(gè)很大的問(wèn)題。要是一上來(lái)就選擇很大的程序進(jìn)行講解,光是描述它和解釋重構(gòu)的進(jìn)行過(guò)程就已經(jīng)很復(fù)雜了,無(wú)論是誰(shuí)都會(huì)看暈。(我不是沒(méi)有試過(guò),只是稍微復(fù)雜一點(diǎn)的例子就能輕易超過(guò)100頁(yè)的篇幅)??梢沁x擇的程序簡(jiǎn)單到足以理解的程度,重構(gòu)看起來(lái)就會(huì)沒(méi)什么價(jià)值了?! 【拖袢魏蜗胍枋霈F(xiàn)實(shí)世界中有價(jià)值的技術(shù)的人一樣,我發(fā)現(xiàn)自己進(jìn)退維谷了。老實(shí)說(shuō),我下面要給出的這樣的小程序是不值得去重構(gòu)的,但是如果我即將展示的代碼是一個(gè)更大的系統(tǒng)的一部分,那么重構(gòu)很快就會(huì)變得重要起來(lái)。所以請(qǐng)你在看這個(gè)例子的時(shí)候,把它想象成屬于一個(gè)比它大得多的系統(tǒng)。  1.1 起點(diǎn)  這個(gè)示例程序非常簡(jiǎn)單。它負(fù)責(zé)計(jì)算并打印出音像店里顧客的消費(fèi)單據(jù)。程序被告知客戶(hù)租借了哪些影片,租期多長(zhǎng)。然后它會(huì)根據(jù)影片的租期計(jì)算出金額,并標(biāo)識(shí)出影片的類(lèi)型。影片一共有三種類(lèi)型:普通片、兒童片和新片。除了計(jì)算金額以外,單據(jù)上還會(huì)計(jì)算出??偷淖?。

圖書(shū)封面

圖書(shū)標(biāo)簽Tags

無(wú)

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


    重構(gòu)(Ruby版) PDF格式下載


用戶(hù)評(píng)論 (總計(jì)19條)

 
 

  •   對(duì)于重構(gòu)的理解會(huì)有一定的認(rèn)識(shí),從ruby的代碼角度加以說(shuō)明
  •   對(duì)沒(méi)有系統(tǒng)性重構(gòu)經(jīng)驗(yàn)的我,有很好的參考,尤其是以Ruby語(yǔ)言來(lái)敘述,難能可貴。
  •   很好的書(shū),把重構(gòu)演繹到了極致,很完美的書(shū),謝謝作者
  •   用一個(gè)良好的思維方式去編寫(xiě)代碼
  •   超級(jí)經(jīng)典的一本書(shū)!值得一看!
  •   內(nèi)容好,夠新!
  •   書(shū)內(nèi)容很清晰,易懂,很好。
  •   雖然還沒(méi)讀,但是這是高手推薦的,所以買(mǎi)來(lái)就很放心
  •   這類(lèi)書(shū)應(yīng)該多看
  •   發(fā)貨速度快,配送也很快哦
  •   看過(guò)Java版的重構(gòu),Ruby的也很精彩
  •   重構(gòu)(Ruby版)正在研究中
  •   ruby重構(gòu)學(xué)習(xí)中
  •   還不錯(cuò),有借鑒價(jià)值。只是開(kāi)發(fā)環(huán)境大多不夠給力,支持快速重構(gòu)功能的比較少。
  •   剛看沒(méi)多久,不過(guò)需要有Ruby基礎(chǔ)才好
  •   印刷質(zhì)量一般,紙張一般,封面磨損嚴(yán)重
  •   真的是一本不錯(cuò)的書(shū)!
  •   為Ruby開(kāi)發(fā)工具開(kāi)展重構(gòu)提供指導(dǎo)
  •   質(zhì)量很好哦,價(jià)格也很便宜,是一本好書(shū)呢
 

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

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