Re: [心得]以策略模式重構switch case或if (影片)

作者: landlord (91)   2020-12-20 23:39:45
※ 引述《landlord (91)》之銘言:
: 最近在客戶那邊一起 pair 重構 legacy code,
: 碰到了一大段 if/else statement,用來判斷什麼時候該使用哪一種cache,
: 並依照不同 cache 的邏輯來決定回傳的內容。
: 發現還是有蠻多風氣比較封閉的公司對這類型的基本功跟處理不是很熟悉,
: 可能是對 code smell 不熟,對重構不熟,對 design pattern 不熟,對工具不熟。
: 因此,我用自己幾年前的一個「計算運費」的範例,設計成這類型程式碼重構的簡介。
: 這個範例之前是 C#,這次示範我改用 Java,用 IntelliJ 來重構。
: 有整個重構過程的 IDE 操作影片,也有每一個重構 baby steps 的 commit history。
: 影片:https://youtu.be/zO-NnNC-xyg
: GitHub commit history: https://bit.ly/strategy-91
: 也可以參考 《Refactoring to Patterns》 的
: Replace Conditional Logic with Strategy:
: https://www.informit.com/articles/article.aspx?p=1398607&seqNum=2
: IntelliJ/Android Studio 在重構上還是地表上最強的兵器啊。
上回用 Java + IntelliJ 來重構一堆 if/else 的計算運費範例,
這次改用 C# + Rider 來重構一樣的例子,方便習慣 C# 的朋友參考與練習,
不過這次刻意改用 Func<T> 來當作 strategy 的實作內容,
以 function 來取代,省去 class + interface 的部份。
兩種作法適用場景不同,東西夠小夠單純,想要少一點 class/interface 等 elements,
可以先這樣做,到真的有需要時,對熟悉重構的人來說,
要從 Func<T> 重構成 class + interface 只是一塊小蛋糕而已。
## Reference
1) C# + Rider Youtube 版影片:https://youtu.be/9rfVe6Uikt0
2) GitHub commit history: http://bit.ly/strategy-csharp
註:一般人的 Rider 沒有那個「把三元判斷式 自動替換成 Math.Min()」的燈泡,
那是我自己刻到 IDE 裡面的。
作者: RumiManiac (Rumi!)   2020-12-21 04:37:00
推91 你真的很猛
作者: wulouise (在線上!=在電腦前)   2020-12-21 06:36:00
c#的有repo嗎?我眼殘,看到了運費在cart裡面算,是因為你的範例不想要太多class?
作者: landlord (91)   2020-12-21 12:55:00
上個java版本,我有用interface+class用多型取代switch這次則是刻意只用到function來做,需要class再抽就好兩種給大家比較一下囉
作者: jason710068 (綜合水果汁z)   2020-12-22 08:40:00
好文推

Links booklink

Contact Us: admin [ a t ] ucptt.com