[RefactoringToPatterns] 8.1 Form Template Method

此系列文章是我閱讀《Refactoring To Patterns》過程中實際演練的筆記。閱讀過程中發現若沒有相當的 Design Patterns、Refactoring 底子,此書真的不易閱讀,必須伴隨實際操作才能更理解每個步驟具體的方式,故在這記錄之餘也跟各位分享。

書中是使用 Java 的程式碼作為範例,而我比較熟稔 C#,所使用的演練環境為:Visual Studio 2017、ReSharper、VsVim。過程中會因應 ReSharper 的功能,所以有些許的調整以便更「優雅」的進行重構。

此篇是關於 8.1 Form Template Method 的具體演練。

此次的 smaple code 是從 https://github.com/corywheeler/refactoringtopatterns 而來,整理後的詳細程式碼請見:https://github.com/mystic01/refactoringtopatterns

以下,請搭配影片閱讀(數字表示影片時間、藍色表示重構技法、紫色表示我的困擾):

這篇只有兩個小步驟,或許更多的意義在於體悟什麼是「Template Method」吧。

  1. 將所有 class 的 Captial() 盡可能整理為 RiskAmountFor() * Duration() * RiskFactorFor() 的樣式。0:00
     並將 RiskAmountFor() 於 base class 定義為 abstract method這我一直沒找到比較優雅的方式,只能傻傻的複製貼上...。0:17
    1. CaptialStrategyTermLoan:將 loan.GetCommmitment() 抽取為 RiskAmountFor() ,搞定。
    2. CaptialStrategy 定義 abstract 的 RiskAmountFor()
    3. CapitalStrategyRevolver:將 loan.OutstandingRiskAmount() 抽取為 RiskAmountFor(),搞定。
    4. CapitalStrategyAdvisedLine:將 loan.GetCommmitment() 抽取為 RiskAmountFor() ,搞定。
       
  2. 接著將 Capital() 抽取至 CapitalStrategyPull Members Up),使其成為 Template Method。2:08
    1. CapitalStrategyTermLoanCapitalStrategyAdvisedLineCapital() 與 Template Method 均相同,可刪除。
    2. CapitalStrategyRevolverCapital() 整理為 base.Capital() + UnusedCapital()
       

搞定~!!

其他 Refacotirng To Patterns 影片請見:Refactoring To Patterns
不堪入目的練功過程:Refactoring To Patterns (exercise)