重構_改善既有代碼的設計(五)

一、重構的記錄格式安全

    介紹重構時,我採用一種標準格式。每一個重構手法都有以下五個部分。函數

    (1)首先是名稱。建造一個重構詞彙表,名稱是很重要的。這個名稱也就是我將在本書其餘地方使用的名稱。工具

    (2)名稱以後是一個簡短概要。簡單介紹此重構手法的適用情景,以及它所作的事情。這部分能夠幫助你更快找到你所須要的重構方法。測試

    (3)動機爲你介紹「爲何須要這個重構"和"什麼狀況下不應使用這個重構"。設計

    (4)作法簡明扼要地一步一步介紹如何進行此重構對象

    (5)範例以一個十分簡單的例子說明此重構手法如何運做。it

    "概要"包括三個部分:1)一句話,介紹這個重構可以幫助解決的問題;2)一段簡短陳述,介紹你應該作的事;3)一副速寫圖,簡單展示重構先後示例:有時候我展現代碼,有時候我展現UML圖。總之,哪一種形式能更好呈現該重構的本質,我就使用哪一種形式。若是你之前見過這一重構手法,那麼速寫圖可以讓你迅速瞭解這一重構的概況;若是你未曾見過這個重構,可能就須要瀏覽整個範例,才能獲得較好的認識。重構

    "作法"出自我本身的筆記。這些筆記是爲了讓我在一段時間不作某項重構以後還能記得怎麼作。它們也頗爲簡潔,一般不會解釋"爲何要這麼作那麼作"。我會在"範例"中給出更多解釋。這麼一來,"作法"就成了簡短的筆記。若是你知道該使用哪一個重構,但記不清具體步驟,能夠參考"作法"部分(至少我是這麼使用它們的);若是你初次使用某個重構,可能只參考"作法"還不夠,你還須要閱讀"範例"。軟件

    撰寫"作法"的時候,我儘可能將重構的每一個步驟都寫的簡短。我強調安全的重構方式,因此應該採用很是小的步驟,而且在每一個步驟以後進行測試。真正工做時,我一般會採用比這裏介紹的"嬰兒學步"稍大些的步驟,然而一旦出問題,我就會撤銷上一步,換用比較小的步驟。這些步驟還包含一些特定情況的參考,因此它們也有檢驗表的做用。我本身常常忘掉這些該作的事情。引用

    "範例"像是簡單而有趣的教科書。我使用這些範例是爲了幫助解釋重構的基本要素,最大限度地避免其餘枝節,因此我但願你能原諒其中的簡化工做(它們固然不是優秀商用對象涉及的適當例子)。不過我敢確定,你必定能在你手上那些更復雜的狀況中使用它們。某些十分簡單的重構乾脆沒有範例,由於我以爲爲它們加上一個範例不會有多大意義。

    更明確的說,加上範例僅僅是爲了闡釋當時討論的重構手法。一般那些代碼最終仍有其餘問題,但修正那些問題須要用到其餘重構手法。某些狀況下數個重構常常被一併運用,這時候我會把某些範例拿到另外一個重構中繼續使用。大部分的時候,一個範例只爲一項重構而設計,這麼作是爲了讓每一項重構手法自成一體,由於這份重構列表的首要目的仍是做爲參考工具。

    這些例子不會告訴你如何設計一個employee對象或一個order對象。這些例子的存在純粹只是爲了說明重構,除此以外別無用途。例如你會發現,我在這些例子中用double數據來表示貨幣金額。我之因此這樣作,只是爲了讓例子簡單一些,由於"以什麼形式表示金額"對於重構自身並不重要。在真正的商用軟件中,我強烈建議你不要以double表示金額。若是真要表示貨幣金額,我會使用Quantity模式(又接觸到一個模式,補上~)

二、尋找引用點

    不少重構都要求你找到對於某個函數、某個字段或某個類的全部引用點。作這件事的時候,記得尋求計算機的幫助。有了計算機的幫助,你能夠減小遺漏某個引用點的概率,並且一般比人工查找更快。

    不要盲目的查找-替換。你應該檢查每個引用點,肯定它的確指向你想要替換的東西。或許你很擅長運用查找手法,但我老是用心去檢查,以確保替換時不出錯。要知道,你能夠再不一樣的類中使用相同函數名稱,也能夠在同一個類中使用名稱相同但簽名不一樣的函數(好像指的是參數類型、參數個數、參數順序不一樣的函數),因此直接替換出錯機會是很高的。


    這一章主要介紹這本書接下來的重構格式,也講述了很多想法,我以爲對於一本技術方面的書而言,若是可以引導讀者瞭解做者的想法,書本的內容也還不錯的話,那麼這本書離經典也不遠了。通過這一章的介紹,接下來的內容,讓我很是期待。

相關文章
相關標籤/搜索