作者landlord (91)
看板Soft_Job
标题Re: [心得]以策略模式重构switch case或if (影片)
时间Sun Dec 20 23:39:45 2020
※ 引述《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 里面的。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.25.24.232 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1608478788.A.816.html
※ 编辑: landlord (114.25.24.232 台湾), 12/20/2020 23:41:20
※ 编辑: landlord (114.25.24.232 台湾), 12/20/2020 23:41:38
1F:→ RumiManiac: 推91 你真的很猛 12/21 04:37
2F:推 wulouise: c#的有repo吗? 12/21 06:36
3F:→ wulouise: 我眼残,看到了 12/21 06:37
4F:推 wulouise: 运费在cart里面算,是因为你的范例不想要太多class? 12/21 06:42
5F:→ landlord: 上个java版本,我有用interface+class用多型取代switch 12/21 12:55
6F:→ landlord: 这次则是刻意只用到function来做,需要class再抽就好 12/21 12:56
7F:→ landlord: 两种给大家比较一下罗 12/21 12:56
8F:推 jason710068: 好文推 12/22 08:40