出版時間:2010 出版社:機械工業(yè)出版社 作者:Jay Fields,Shane Harvie,Martin Fowler 頁數(shù):294 譯者:徐旭銘
Tag標簽:無
前言
差不多十年前,我(Martin)曾經和Kent Beck一起做過一個項目。這個項目的名字叫C3,它后來成為極限編程誕生的標志性項目,并幫助我們看清了敏捷軟件運動的方向?! ∥覀儚哪莻€項目里學到了很多東西,不過真正震撼到我的是Kent那種有條不紊、持續(xù)不斷改進系統(tǒng)設計的風格。一直以來我對編寫干凈的代碼都抱有極大的熱情,堅信花時間去清理有問題的代碼,以便讓團隊能更快捷地開發(fā)功能是非常有價值的事情。而Kent向我介紹了一種很多頂尖Smalltalk程序員使用的技術,它能讓我的工作效率成倍提升。這是一種他們稱之為重構的技術,我很快就變得想要在任何場合下都把它介紹給別人。但是市面上沒有任何出版物或是類似的資源可以讓我指引人們去自己學習這項技術。既然Kent和其他Smalltalk程序員都沒意愿要寫一本,所以我就決定自己動手了?! 〗Y果我的那本《重構》大受歡迎,在重構成為主流技術的過程中看起來還扮演了相當重要的角色。隨著近年來Ruby的興起,給這本書寫一本Ruby版是很有意義的,為此我拉來了Jay和Shane?! ∈裁词侵貥嫛 ≈貥嬍歉淖冘浖到y(tǒng)的過程,它不會改變代碼的外部行為,但是可以改善其內部結構。它清理代碼的嚴謹方式能把引入bug的風險降至最低?;旧袭斈氵M行重構的時候,就意味著代碼的設計在完成時會得到改善?! 『芏嗳擞X得“代碼的設計在完成時會得到改善”這種說法相當古怪。多年來大多數(shù)人都相信設計第一、編碼第二的原則。而隨著時間的推移,不斷修改代碼以及系統(tǒng)的完整性后,原本設計的結構也會慢慢變得模糊。代碼逐漸從一項工程活動淪落為敲敲打打的修補工作?! ≈貥嬇c此正好相反。有了重構,你可以把一個糟糕甚至混亂的設計,逐漸轉變成設計良好的代碼。每一個步驟都非常簡單,甚至有點過分簡單了。比如把一個實例變量從一個類移到另一個類,從一個方法里抽出一些代碼單獨放到一個方法里去,以及在層次體系之間移動一些代碼等。但是這些小改動累積起來卻能夠徹底改進設計。這和通常認為的軟件衰敗論的觀念是完全相反的?! ≡谥貥嫷臅r候你會發(fā)現(xiàn)工作的重心發(fā)生了變化。設計不再是最先進行,而是在開發(fā)過程中不斷進行的。你會從構建系統(tǒng)中學習到如何改進設計。這種交互能讓程序的設計隨著開發(fā)工作的進行一直保持在較好的水準上。
內容概要
本書是一本專門為職業(yè)Ruby程序員編寫的重構指導。它的目標是向你展示如何以一種既受到嚴格控制又高效的方式進行重構。你將學習到不在代碼中引入bug并能按部就班改進結構的重構方式。本書的主要內容:第1章指出重構是什么;第2章討論進行重構的理由;第3章指出需要進行重構的信號;第4章討論測試在重構中扮演的重要角色;第5章~第12章介紹了重構花名冊,它包含了在重構領域里到目前為止的成果。當需要進行某項任務時,這份花名冊可以手把手地提醒我們安全的做法。 本書是對Martin Fowler的經典權威著作《重構》的重大更新版,并以Ruby為例徹底重寫——并非只是把代碼從Java版中搬過來而已?! 薪o出了一份詳細的重構花名冊,包含超過70條經過錘煉的Ruby重構技術,每一條都有詳細指引、使用細節(jié)和范例代碼。其中很多重構技術都用到了Ruby專有的強大特性,你可以從華章網站下載到全部代碼?! ∽髡呓栌肍owler最初的想法,展示了如何以一種受控、高效以及迭代的方式進行重構,幫助你有條不紊地改善代碼的質量而不會引入新的bug。不論是編寫還是維護Ruby代碼,本書都將是不可或缺的重要參考?! ”緯鴥热荨 ±斫庵貥嫷暮诵脑瓌t,以及進行重構的原因 發(fā)現(xiàn)Ruby代碼中的“壞味道” 逐步將糟糕的設計轉變成設計精良的代碼 構建測試以便保證重構正確進行 理解重構中的難點以及克服的辦法 編寫正確包裝代碼的方法 在對象之間移動特性,將其放在最適合的地方 將數(shù)據(jù)組織成更容易處理的形式 簡化條件表達式,更高效地利用多態(tài) 創(chuàng)建更易于理解和使用的接口 進行大型重構,這將可能影響整個軟件系統(tǒng)數(shù)月乃至數(shù)年 成功重構Ruby on Rails代碼
作者簡介
Jay Fields 是DRW Trading公司的一名軟件程序員,也是一位研討會的??汀ay對發(fā)現(xiàn)和成熟化創(chuàng)新式解決方案總是抱有激情。Jay的個人網站是:www.jayfields.com。
Shane Harvie 在美國、印度和澳大利亞等國的敏捷公司中從事軟件開發(fā)工作。他現(xiàn)在位于芝加哥的DRW Trading
書籍目錄
譯者序 序 前言 致謝 第1章 重構初體驗 1.1 起點 1.1.1 Movie 1.1.2 Rental 1.1.3 Customer 1.1.4 對起始程序的評價 1.2 重構第一步 1.3 Statement方法的分解和再組合 1.3.1 移動Amount的計算 1.3.2 提煉??头e分的計算 1.3.3 移除臨時變量 1.4 用多態(tài)替換價格代碼中的條件邏輯 1.5 小結 第2章 重構的基本原理 2.1 重構的起源 2.2 重構的定義 2.3 重構的理由 2.3.1 重構可以改進軟件的設計 2.3.2 重構讓軟件變得易于理解 2.3.3 重構可以幫助你發(fā)現(xiàn)bug 2.3.4 重構可以幫助你更快地編程 2.4 重構的時機 2.4.1 事不過三 2.4.2 在添加功能時重構 2.4.3 在需要修復bug時重構 2.4.4 在進行代碼復審時重構 2.4.5 為了更好地理解而重構(或者說,向著同一個目標進行重構) 2.5 為什么重構能起作用 2.6 我怎么跟經理說 2.7 抽象和重構 2.8 重構的問題 2.8.1 改變接口 2.8.2 數(shù)據(jù)庫 2.8.3 難以重構的設計變化 2.8.4 什么時候不應該重構 2.9 重構和設計 2.10 竹籃打水一場空 2.11 重構和性能 2.12 優(yōu)化薪資系統(tǒng) 第3章 代碼里的壞味道 3.1 重復代碼 3.2 方法過長 3.3 類太大 3.4 參數(shù)列表太長 3.5 發(fā)散型變化 3.6 霰彈型修改 3.7 特性依賴 3.8 數(shù)據(jù)泥團 3.9 基本類型偏執(zhí) 3.10 case語句 3.11 平行繼承體系 3.12 冗贅類 3.13 純臆測的泛化 3.14 臨時字段 3.15 消息鏈 3.16 中間人 3.17 過分親密 3.18 異曲同工的類 3.19 不完善的類庫 3.20 數(shù)據(jù)類 3.21 被拒絕的遺贈 3.22 注釋 3.23 狂熱的元編程 3.24 脫節(jié)的API 3.25 不斷重復的樣板文本 第4章 構建測試 第5章 重構花名冊第6章 組織方法 第7章 在對象之間移動特性第8章 組織數(shù)據(jù)
章節(jié)摘錄
第1章重構初體驗 還記得在編寫《重構》第1版的時候我曾經決定必須這樣寫這個開頭。傳統(tǒng)意義上的技術書籍通常都會先進行一段基本介紹,例如歷史和基本原理等??僧斢腥嗽跁h上這么干的時候,我總是會昏昏欲睡。我會一直心不在焉、似聽非聽地看著演講人,直到他給出一個具體的實例為止。這時我才能回過神來,搞明白他究竟在說什么。原理這種東西很容易說得太寬泛,讓人無法理解怎么才能將它運用于實際。有時候舉個例子就能把話講明白。 因此,在這本書中我決定先給出一個重構的實例。幾位審閱者覺得這么做頗不尋常,甚至可以說相當大膽。但是我從來都沒有后悔過。在很多其他場合談論重構的時候我也都會用到這個例子,我發(fā)覺用舉例來開頭其實是很不錯的主意。雖然例子中有些細節(jié)相當具體,但是你可以通過具體的實例來展現(xiàn)很多普遍的問題?! 『翢o例外,這本Ruby版也將會以一個例子來開頭。在這里我用的是和Java版一樣的那個例子,雖然Jay已經把它變成Ruby版了。多年來我一直在談論這個例子,在這個過程中我又有了一些新的領悟,因此我在重新組織這段內容的時候也相應地做了很多修改。就算你對這本書已經很熟悉了,我們也希望你能從中讀到一點新的東西。如果這是你第一次閱讀本書,那么可以從頭讀起?! 〔贿^所有的介紹性例子都要面對一個很大的問題。要是一上來就選擇很大的程序進行講解,光是描述它和解釋重構的進行過程就已經很復雜了,無論是誰都會看暈。(我不是沒有試過,只是稍微復雜一點的例子就能輕易超過100頁的篇幅)。可要是選擇的程序簡單到足以理解的程度,重構看起來就會沒什么價值了?! 【拖袢魏蜗胍枋霈F(xiàn)實世界中有價值的技術的人一樣,我發(fā)現(xiàn)自己進退維谷了。老實說,我下面要給出的這樣的小程序是不值得去重構的,但是如果我即將展示的代碼是一個更大的系統(tǒng)的一部分,那么重構很快就會變得重要起來。所以請你在看這個例子的時候,把它想象成屬于一個比它大得多的系統(tǒng)?! ?.1 起點 這個示例程序非常簡單。它負責計算并打印出音像店里顧客的消費單據(jù)。程序被告知客戶租借了哪些影片,租期多長。然后它會根據(jù)影片的租期計算出金額,并標識出影片的類型。影片一共有三種類型:普通片、兒童片和新片。除了計算金額以外,單據(jù)上還會計算出常客的租。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載