歡迎光臨
每天分享高質量文章

豆瓣評分9.3!時隔20年,《重構》第二版終於來了!

來自:程式員書庫(ID:OpenSourceTop)

書單來自:https://martinfowler.com/articles/refactoring-2nd-ed.html

 

在漫長的等待下,《重構》終於要出第二版啦!

 

  • 豆瓣評分9.3,銷量百萬

  • 世界級軟體開發大師Martin的不朽經典

  • 涵蓋70多個可行的重構

 

Martin在他的博客上發佈了關於《重構(第2版)》的細節下麵我們一起來詳細瞭解一下,第二版有哪些大的改變,以下為Martin博客原文:

 

我很幸運能夠與Kent Beck一起參與推出極限編程的C3專案。我從Kent那學到了很多東西,其中有一點,就是他會不斷改進代碼庫來保證它健康,這個方法在當時還沒有名稱。 我在很多地方都強調過這種方法的重要性,但在市面上卻找不到關於這種技術的書籍,所以我打算自己寫一本,《重構》就這樣出現了

 

如今這項技術現在已經廣為人知,儘管它的執行情況往往不盡如人意,這本書很受歡迎,你依然可以通過這本舊書繼續學習如何重構,但它也確實老了,就像java.util.Vector一般。

 

這些年來我一直在考慮修訂它,但又不是那麼情願,畢竟它仍然能夠很好地解釋重構這一技術,而且第二版有一個可怕的習慣,就是在原版的基礎上沒有改進。但另一股力量又一直驅使著我,在寫這本書的時候,把“類”視為是構建代碼機制的主要結構已經成為主流。然而,現在我們看到其他結構發揮了更大的作用。在我看來,類仍然很有價值,但是重構已經比較少地以類為中心;我們要意識到,隨著代碼不斷被重構,類也是可以變化的。

 

在2015年和2016年初,我寫了一系列探索重構環境的各種文章,這讓我明確了是否要進行重寫,如果重寫,那又要如何處理?到2016年年中,我終於做好了開始的準備工作

 

 

第二版變化

 

這些變化很小但又包羅萬象,當然書的基本結構是沒有改變的。本書從一個開放式的例子、一個章節的原則、一個“代碼壞味道”的調查和一個測試的介紹開始,大部分內容依然是重構,在這68個重構中,除了保留原有的10個,我還添加了17個新的重構。

 

儘管書的整體結構沒什麼變化,但內容上的文字變化是巨大的。每一章和重構示例都被重寫過,幾乎是從零開始,可以說沒有從舊版本中剪切和粘貼文本。

 

新版重新調整重心,將重點更少地放在類上。雖然這聽起來很簡單,只需將“提取方法”的名稱更改為“提取函式”,但它確實需要重新考慮每個重構的方方面面。我需要重新考慮這個動機,經常需要重新構建,這些結構至少需要一個詳細的審查,通常需要完全重寫。我沒有對此做詳細的說明,但我的感覺取用一個相對簡單的舊的重構,都需要重新考慮兩個重構。

 

然而,還有另一個變化在某種程度上並不重要,但肯定會得到很大的關註,就是這些示例不再使用Java。

 

當我在寫作中選擇一種語言作為示例時,我首先想到的是讀者。“什麼樣的語言可以幫助大多數讀者理解書中的概念?”,重構不是一本特定於某種語言的書,裡面的示例已經通過Java中的示例進行瞭解釋,但是重構適用於大多數語言,我之所以選擇Java,是因為當時我覺得如果代碼示例是用Java編寫的,那麼大多數人都能夠理解它們。1997年確實是這樣,但2017年呢?

 

我考慮使用多種語言,以弱化與某一語言強相關的偏見。但我覺得這會讓讀者更困惑,最好是只使用一種語言,這樣他們就能習慣一致的表達形式。那麼哪一個對讀者來說是最平易近人的呢?這種語言需要廣泛流行,在語言流行度調查中排名前六,最好使用基於C語言的語法,因為大多數程式員都能識別基本的代碼結構。考慮到這一點,有兩門編程脫穎而出。一個是Java,它仍然被廣泛使用並且易於理解。但我選擇了另一種方法:JavaScript。

 

選擇JavaScript對我來說是非常諷刺的,很多讀者可能都知道,我不喜歡它。它有太多令人尷尬的邊緣情況和笨拙的用法。ECMAScript 2015 (ES6)引入了一個相當好的類模型,它使得許多面向物件的重構更容易表達,但是仍然存在一些最原始的弊端。選擇它而不是Java的最主要原因是它並不完全以類為中心,它有頂層函式,使用頂級函式是很常見的,這使得重構變得更加容易。

 

以上就是關於《重構(第2版)》的大致內容,除此之外,Martin還提出《重構(第2版)》會推出電子書版本。在2018年感恩節期間,這本書的英文版發佈了,從下圖可以看出,和第一版相比,輕薄了很多。這並不是因為頁數大幅下降的原因,新版本有416頁,之所以更薄是因為採用了更薄的紙張

據瞭解,《重構》中文版計劃2019年3月15日同步出版,喜歡的伙伴們到時不要錯過了

 


●編號698,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

 

程式員書庫

更多推薦25個技術類公眾微信

涵蓋:程式人生、演算法與資料結構、黑客技術與網絡安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

    赞(0)

    分享創造快樂