重构手法——提炼函数、搬移函数、以多态取代条件表达式
目錄
- 我的心路歷程
- 我的學習概括
- Extract Method(提煉函數)
- 動機*--做法
- 動機--做法*
- Move Method(搬移函數)
- 動機*--做法
- 動機--做法*
- Replace Conditional with Polymorphism(以多態取代條件表達式)
- 動機*--做法
- 動機--做法*
我的心路歷程
今天開始學習《重構改善既有代碼的設計》這本書。我首先翻閱了前言部分,書中寫了什么是重構。什么是重構?
我的思考心路:
對于重構的認識,我認為程序開發并不是一個設計后即動作的行為,它需要在開發過程中持續整理程序,最大限度減少引入錯誤的概率的過程。
繼續翻閱前言,書中寫了本書有什么。告訴了書本的章節對應內容。第1章是一個重構的Demo,第2章是重構的原則定義,第3章是“壞代碼”的味道,第5-12章是核心部分——重構的一些手法,等等。從哪開始快速入手看呢?
我的思考心路:
翻開第1章,我了解到這個Demo主要是個影片出租店程序,程序的功能是計算顧客消費金額并打印詳單。翻看了第1章目錄:起點–重構第一步–分解并重組statement()–運用多態取代與價格相關的邏輯條件–結語。我看看結語講了什么?
翻閱結語,結語中表示第一章的Demo示范了數個重構手法。重構后的程序使責任分配更合理,這種風格,將迥異于過程化風格,也使碼農難以再滿足于結構化風格。看看Demo示范了那幾個重構手法?
Demo中重構手法有:
P110 提煉函數
P142 搬移函數
P255 以多態取代條件表達式
P171 自封裝字段
P227 以state/strategy取代類型碼
我的學習概括
Extract Method(提煉函數)
動機*–做法
我自己的理解如下:
概念:
這個手法做法是,把可以被組織到一起的代碼提煉到一個獨立函數中,并用名稱來表示用途。
應用場景:
達到目的:
得到簡短而命名良好的函數。
優勢:
動機–做法*
我自己的理解如下:
做法簡圖:
結合上圖,我的關注點如下:
copy過程中注意安全:
意外1:
源函數中變量、參數的作用域與新函數不一致。
措施:若是局部變量,新函數里傳入這部分參數。
意外2:
copy過程中臨時變量被修改了。
措施:將被提煉代碼段處理為一個查詢,將結果賦值給相關變量。
Move Method(搬移函數)
動機*–做法
我自己的理解如下:
概念簡圖:
概念:
類A中函數Fun a與類B有調用關系的情況下,Fun a最常引用的類B中建立類似形為Fun a`的新函數,則Fun a變成單純的委托函數,或可完全移除Fun a。
應用場景:
達到目的:
使系統中的類更簡單,系統任務交付更干脆。
動機–做法*
我自己的理解如下:
做法簡圖:
結合上圖,我的關注點如下:
移動路徑方向:函數Fun a與對象B交流比自己對象A交流多,所以搬移方向往B合適。
搬移過程中注意安全:
意外1:
新目標類B中缺少對A的引用機制。
措施:把源對象類A的引用當作參數,傳給新目標類B的Fun a`。
意外2:
Fun a包含異常處理,搬移后出現異常處理異常。
措施:根據邏輯判斷某個異常該由哪個類處理,若類A負責,則異常處理留在類A。
Replace Conditional with Polymorphism(以多態取代條件表達式)
動機*–做法
我自己的理解如下:
概念簡圖:
概念:
將條件表達式的每個分支放進一個子類的覆寫函數中,然后將原始函數聲明為抽象函數。
應用場景:
同一組表達式在程序多個地方出現。
優勢:
動機–做法*
我自己的理解如下:
結合上面的概念簡圖,我的關注點如下:
替換過程中注意安全:
總結
以上是生活随笔為你收集整理的重构手法——提炼函数、搬移函数、以多态取代条件表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑老是提示虚拟内存不足的原因及解决办法
- 下一篇: java hibernate 表关联_H