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

楼主: landlord (91)   2021-01-07 23:35:45
因为有朋友想要 Python 的版本,
简单的 legacy code 也可以让他们玩玩 team build 练练手,
所以我就顺手整理了 Python 的版本了。
- GitHub Repo & commit history: http://bit.ly/strategy-python-91
- 用 PyCharm 重构的影片,YouTube: https://youtu.be/IMV-lL_2jUw
好朋友 Julian 也试着用 go 玩了一下,有 func 跟 interface 两种版本:
- func: http://bit.ly/strategy-go-by-func
- interface: http://bit.ly/strategy-go-by-interface
※ 引述《landlord (91)》之铭言:
: ※ 引述《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 里面的。
作者: leoone (里欧一代)   2021-01-08 11:34:00
推!
作者: SweetDish (当不了天菜当甜菜)   2021-01-08 22:57:00
先推
作者: WaterLengend (Leeeeeeeeooooooo)   2021-01-13 08:55:00
先推再看XD

Links booklink

Contact Us: admin [ a t ] ucptt.com