此系列文章是我閱讀《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」吧。
- 將所有 class 的
Captial()盡可能整理為RiskAmountFor() * Duration() * RiskFactorFor()的樣式。0:00
※ 並將RiskAmountFor()於 base class 定義為 abstract method,這我一直沒找到比較優雅的方式,只能傻傻的複製貼上...。0:17CaptialStrategyTermLoan:將loan.GetCommmitment()抽取為RiskAmountFor(),搞定。- 在
CaptialStrategy定義 abstract 的RiskAmountFor()。 CapitalStrategyRevolver:將loan.OutstandingRiskAmount()抽取為RiskAmountFor(),搞定。CapitalStrategyAdvisedLine:將loan.GetCommmitment()抽取為RiskAmountFor(),搞定。
- 接著將
Capital()抽取至CapitalStrategy(Pull Members Up),使其成為 Template Method。2:08- 因
CapitalStrategyTermLoan、CapitalStrategyAdvisedLine的Capital()與 Template Method 均相同,可刪除。 - 將
CapitalStrategyRevolver的Capital()整理為base.Capital() + UnusedCapital()。
- 因
搞定~!!
其他 Refacotirng To Patterns 影片請見:Refactoring To Patterns
不堪入目的練功過程:Refactoring To Patterns (exercise)



