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