【重构】重构概要--六大重构模块
生活随笔
收集整理的這篇文章主要介紹了
【重构】重构概要--六大重构模块
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
重構方法介紹:
重構改善既有代碼的設計
一 重新組織函數
- 關于注釋 :要盡可能少的使用注釋 , 注釋越多代碼的可讀性反而更差,注釋可以使用函數名來代替 , 不要管函數名有多長, 即使函數名比函數中的代碼還要長也不要緊 ;
- 提煉函數 : 整理函數, 使函數恰當的封裝代碼 , 函數可以有效的替換注釋。太長的函數會包含大量的信息 , 代碼的可讀性變得很差, 而且注釋會很多 ,每隔一段都要添加一行注釋,這樣可讀性變得很差 。比如,我們在一個方法中相關的代碼進行了注釋 ,這里我們就可以將這些相關代碼提取出來 , 封裝到一個函數中, 使用函數名將這段代碼想要執行的動作表達出來。這種手法叫做“提煉函數”。
- 內聯函數:與提煉函數相反的方法是“內聯函數”,內聯函數就是將函數中的代碼替換到函數調用的位置。在提煉函數的過程中,函數的粒度太細,函數沒有做實質性的東西,可以將函數還原到代碼中。
- 處理局部變量 :提煉函數最大的難題就是處理局部變量。一些簡單的局部變量可以使用“以查詢取代臨時變量”來解決;對于那種多次復用多次賦值的變量,如果這個變量不是循環需要的變量,也不是用于統計結果的變量,變量的兩次賦值沒有關聯,可以設置兩個變量,分別替換復用的變量;對于更加復雜的局部變量,可以將方法提取成一個類,這是提煉函數的終極絕招。
- 移除對參數的賦值:在函數中不要對參數進行操作,如果我們需要對參數操作,可以設置一個臨時變量接收參數的值,對這個臨時變量進行操作。
- 替換算法:函數重新組織之后,如果發現算法可以經過改進,能更加明確的表明函數的意義,可以將這個算法替換;
二 在對象之間搬移特性
- 功能模塊歸屬類:對象設計中, 將一個功能模塊放在哪個類中,是最重要的任務之一,誰也不能一開始保證設計的是完全合適的,這就需要“對象之間搬移特性”這個重構方法。
- 搬移函數和搬移字段:這兩種重構方法都可以解決大多數的問題,如果兩種方法同時使用,先搬移字段,在搬移函數。
- 提煉類和將類內聯化:如果一個類承擔責任過多,會變得臃腫不堪,這種情況下可以將一部分功能模塊分離出去,提煉出另一個類;如果一個類的功能模塊太少,這個類很小,可以將類內聯化,將這個類合并到其它功能類似的類中。
- 隱藏委托關系和移除中間人:當用戶通過一個類調用另一個類時,要使用另一個類的功能的時候,為了實現更好的封裝,可以隱藏委托關系,在服務端添加一個委托函數,使用戶直接訪問這個類,屏蔽用戶對委托關系的了解;如果用戶經常通過這個類訪問其他的類,每個訪問都要加上一個委托函數,如果這種過程過于復雜,我們可以將中間人移除,取消委托關系,與隱藏委托關系是相對的。
- 引入外加函數和引入本地擴展:當我們想要將一個功能添加給類的時候,不能對該類進行操作,可以引入外加函數;當添加的功能很多的時候,可以將這些想要添加的功能放在一個類中,我們整體引入這個類,即引入本地擴展。
三 重新組織數據
- 自封裝字段 : 就是給類中的私有成員變量加上get , set方法 , 注意添加的get , set方法沒有修飾符 , 要與下面的封裝字段區分開 . 關于通過何種方法訪問類中的數據 , 一直存在爭議 . 可以先使用直接訪問的方法來訪問 , 如果出現問題 , 就通過函數在訪問類中的字段 .
- 以對象取代數據值 : 在編程過程中經常使用一個簡單的數值表達某個概念 , 我們可以創建一個對象來表達這個改變 , 將啞的數據變成了善于表達的對象 , 可以使程序變得更優美 .
- 以對象取代數組 : 如果發現一個數組的的行為方式很像一個數據結構 , 可以把數組變為對象 , 并添加該數組對應的行文方法 , 使數據結構更加清晰的顯露出來 .?
- 魔法數 : 帶有特殊含義的數字 , 應避免魔法數的存在 , 使用常量來代替魔法數 .?
- 單向關聯和雙向關聯 : 類之間的關聯就是在一個類中 , 定義一個另一個類的對象作為成員變量 ; 單向關聯就是在一個類中存在另一個類的成員變量 , 另一個類中沒有該類成員變量 ; 雙向關聯就是在兩個類中同時存在另一個類的對象作為成員變量 . ?單向關聯的情況下 , 如果我們需要一個反向指針 , 例如客戶和訂單 , 我們需要知道一個客戶有多少訂單 , 同時又想知道這個訂單屬于哪個客戶 , 這樣我們就需要將單向關聯轉為雙向關聯 . 大量的雙向關聯會導致很多僵尸對象 , 一個對象已經沒有用處了 , 但是有其它類中定義了改對象作為成員變量 , 這樣我們就需要將這個雙向關聯改為單向關聯 ;?
- 復制被監視數據 : 有時用戶界面中會處理業務邏輯相 , 為了將業務邏輯移動到合適的領域類中 , 需要在領域類中保存業務邏輯相關的數據 , 這里的重復的數據時不可避免的 , 分層的優先級要大于數據重復 .?
- 封裝字段,封裝集合,以數據類取代記錄 : 封裝字段與自封裝字段類似 , 但是又有所不同 , 給一個公共的成員變量添加get和set方法 , get和set方法的修飾符是public . 封裝集合 , 對于集合的封裝 , 應該盡量避免將整個集合暴露給用戶 , 最好是將查詢方法 , 添加 , 刪除集合中的元素的方法暴露給用戶 . 以數據類取代記錄 , 在編程環境中有許多記錄型結構 , 要想操作這些記錄型結構就需要創建一個接口類 , 用來處理這些外來數據
總結
以上是生活随笔為你收集整理的【重构】重构概要--六大重构模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Cloud Gateway
- 下一篇: 【Android 应用开发】对Andro