[RefactoringToPatterns] 7.5 Replace Implicit Tree with Composite

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

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

此篇是關於 7.5 Replace Implicit Tree with Composite 的具體演練。

此次的 smaple code 是我建立的,若有錯誤還請多包涵,詳細程式碼請見:https://github.com/mystic01/refactoringtopatterns

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

老實說這篇是我目前為止最摸不著頭緒的一篇,書中這章節罕見的並沒有用 Unit Test 覆蓋整個 Production Code,僅有用類 TDD 的方式建立了 TagNode,確認 TagNode 是預期的行為後,再一一將 production code 給改寫為 TagNode 的樣子。這樣重構的步驟我實在抖抖的,所以我還是先建了一個 Unit Test 覆蓋整個 Production Code,依然用重構的方式由最底層的 writePriceTo 逐一重構為 TagNode 的方式。

若步子邁大了,蛋就給扯了。

 如上所述,此篇摸不著頭緒,沒有使用到太特殊的重構技法,花更多時間在建立這個練習的 Sample Code...,但依據這系列文的原則,還是記錄一下。

  1. 重構writePriceTo() ,改寫為 TagNode (composite) 的方式。0:00
    建立了 addAttribute()addValue()toString() 等 method。
     
  2. 重構 writeProductsTo()5:56
    首次出現 child tag 的結構,建立 add(TagNode childTag)
     
  3. 重構 writeOrdersTo()10:40

 

很空虛的,收工~

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