跳到主要內容

不專業之重構心得分享

最近有位同事和我聊到他做的幾個案子,都略有差異,但因為這些差異讓原來的程式一改再改,很難共用。
這正是重構存在的真正意義呀!

最簡單的重構是從Rename Varibale和Rename Method開始,接著熟練後便開始Extract Method,進一步則是Pull Up、Push Down,再來則是Generalize Type。

我自己做時只有兩個原則:異中求同、同中求異。

異中求同是指在不同的method裏找出相同的區塊,萃出成一個method或是公用class(例如有關數值運算、轉型、中文數字等等);或是不同的class中找出相同的行為,extract為有相關的class pattern(例如Factory、Abstract Factory等pattern)。

同中求異是指在複製貼上的動作後,找出相同的區塊做Extract Method,若有許多子類別則可以Pull Up,諸如此類的應用。

所有的書都寫得類似,重構就像開車,一點一點地修正方向盤,慢慢地就安全抵達目的。個人的經驗是每天都寫code,經過幾年後就會不知不覺地學到重構的方法。

這只是在下不專業的看法,正統的重構技巧請看重構:改善既有程式的設計 (二版)

P.S. 我不擅長Web重構,高手jaceju有篇非常優秀的簡報

留言

snowmantw表示…
根據我自己些許的經驗,有時為了抽出共同 method,反而會製造許多小而層次不一的類別,而且讓整個繼承線變亂。所以有的時候抽出共用 method 到某一類別似乎有它的底線在。

例如 A B class 都有某個 method ,現在為了抽出這個 method 而新增一個類別 C 並讓 A B 繼承之,然而這個類別 C 的存在僅僅是為了讓 A B 可以共用該 method ,像這樣的 class 多起來之後,整個系統就會變得很亂,可能還比繼承前糟糕。
漢堡寫道…
類別的設計,注重的是該類別的責任有那些,而責任對應到的就是其方法,如果只是為了要泛化方法而另外去建立類別,不見得是一種好的想法,可以試試用委託(delegation)來取代~

這個網誌中的熱門文章

自然人憑證讀卡機驅動程式

鳥毅用的是第一代的自然人憑證讀卡機,EZ100PU(後來有同事買EZmini可以讀SIM卡似乎更好),每年報稅時用一次。

本來只是要申請些政府業務,一時之間找不到光碟,沒想到在驅動程式下載居然看到Linux和Mac的驅動程式,剩下的就是政府單位的網頁和程式應該改版了吧!!!

在Windows Server設定L2TP over IPSec VPN

簡單地說,macOS Sierra與iOS 10發表後,大家忽然發現Apple不再支援PPTP,所以一定得設定其他的VPN型態。若不要另外裝client,用L2TP是最方便的,SSL VPN雖然好,但若沒有安裝Agent要連線到任一電腦或是非網頁服務還是挺麻煩的。