Re: [心得]以策略模式重構switch case或if (影片)
因為有朋友想要 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
: : 也可以參考 《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
: 註:一般人的 Rider 沒有那個「把三元判斷式 自動替換成 Math.Min()」的燈泡,
: 那是我自己刻到 IDE 裡面的。
--
1
原原 PO 用 interface 的好處是,shipper 有新的行為時。 可以很簡單的在 interface 加新的 function。 同時可以檢查有 implement Shipper 的 class 要加入新的 function。 感覺上,彈性更好。 缺點嘛... 如果 shipper 很多時每個都要再補 function 是比較累一點。12
終於有空來加入討論啦~ 這邊有 markdown 好讀版: 這邊我也來提一下我的看法。為了閱讀方便我把一些 code snippet 複製在這邊: ```java= public double shippingFee(String shipper, double length, double width, double3
上回用 Java + IntelliJ 來重構一堆 if/else 的計算運費範例, 這次改用 C# + Rider 來重構一樣的例子,方便習慣 C# 的朋友參考與練習, 不過這次刻意改用 Func<T> 來當作 strategy 的實作內容, 以 function 來取代,省去 class + interface 的部份。 兩種作法適用場景不同,東西夠小夠單純,想要少一點 class/interface 等 elements,6
恕刪 策略模式不就是一個戰鬥機器人 防禦模式就護甲值+20 攻擊模式就攻擊力+50 閃避率-10% 回復模式就自動補血+5hp18
首Po最近在客戶那邊一起 pair 重構 legacy code, 碰到了一大段 if/else statement,用來判斷什麼時候該使用哪一種cache, 並依照不同 cache 的邏輯來決定回傳的內容。 發現還是有蠻多風氣比較封閉的公司對這類型的基本功跟處理不是很熟悉, 可能是對 code smell 不熟,對重構不熟,對 design pattern 不熟,對工具不熟。
58
[請益] 非本科學生轉職求建議小弟是念物理做固態理論,碩班畢業目前還沒找到工作,沒這麼容易找到只好邊找邊上線 上課程邊等當兵,三個月期間就刷leetcode700題,想說先把Python程式基礎打穩,這樣 之後才容易上手其他的。慢慢也開始想說也許可以試著往軟體方向邁進。 目前學完coursera ML的基本課程,和一些AWS的相關基礎課程cloud guru課程。我知道我 就是比較死板反應普通的學生,在做報告和準備專案上都手腳很慢,會上課會考試的類型17
Re: [討論] 重構之前要寫測試 不然不要重構這就是TAD, 一般做法是假設以前人做的是對的 拿以前的output當測資 避免以後的output跟預期結果不同 技術面的錯誤→沒有防呆/沒有釋放資源/overflow/沒有check 這應該不在討論範圍內, 也有客觀標準 行為與邏輯的部分才是有爭議的, 要嘛根本沒規格只有口傳15
Re: [請益] 這種情況要怎麼重構我這篇寫的跟原原PO的狀況無關 ※ 引述《tbpfs ( )》之銘言: : 其實我真的不懂為什麼要急著重構 : 有好處嗎? : 一般而言,重構都是發生在農閒的時候10
Re: [新聞] 前Google主管:人類寫程式時代已經結束: 看AI能不能寫code 就下個 copilot 玩玩看就知道了 目前支援copilot的IDE(沒列全部) 1. visual studio 2022 2. visual stduio code6
Re: [請益] 測試儀器自動化程式設計的工作幾年打雜下來, 對於控一些有的沒的, 有一些心得 經驗上, python 接受度很高 所以後來都是提供python 作為自動化的基礎 通訊方面, 打通以下就差不多了 GPIP : PyVISA- 這些都太嫩了 真的要讓他看不懂,要他死 最簡單的方式就是讓物件中含有大量的隱含狀態 讓每個 function call 的結果都跟上下文有關 不要用什麼全域變數來做隱含狀態
- 可以參考這一篇 主要原因跟結果就是 log4j(version 2) was discovered that results in Remote Code Execution(REC) by logging a certain string. 影響版本為