iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
Software Development

沒測試也敢重構?IDE 安全重構 30 日生存指南系列 第 6

Day 6. Extract Method:抽取程式碼的靈魂

  • 分享至 

  • xImage
  •  

龐大臃腫的方法/函式,是可理解性的阻礙。但要怎麼讓它變小?總不能把程式碼砍掉吧。PM 給的需求就是這麼複雜,要是不小心改壞了怎麼辦。啊我就怕被罵。

這大概是工作上最常遇到的問題。在不改變行為的情況下,要把方法/函式拆小,意味著要把某段程式碼剪下來,再貼到另一個地方。可是我只會複製貼上,剪下的過程中程式會有錯誤,好可怕。其實可以不用這麼害怕,我們來看看 Rider 是怎麼幫我做到這件事的

看看這個 method,裡面好多東西,還有 RSA 那又是什麼,一臉就是改了會死的樣子。
https://ithelp.ithome.com.tw/upload/images/20250920/20169414hDODvobWUb.png

我發現只有 orderModel 最後還會用到,其他東西看起來就像中間產物 (intermeditates)。於是我微調一下它的位置,讓它跟其它東西分開。這個動作在 Martin Fowler 的《重構》當中叫做 Move Statement,其實不完全算是安全重構的一種。但在這邊的例子很簡單,我清楚知道我的移動是沒有副作用的,所以就先這樣吧。
https://ithelp.ithome.com.tw/upload/images/20250920/20169414t37wpLMu8G.png

接著選取中間一大坨的中間產物,按下 Refactor This。Rider 說可以使用 Extract Method,並且告訴我它的快捷鍵是 "⌘Cmd + R, M",下次我就可以直接用了。
https://ithelp.ithome.com.tw/upload/images/20250920/20169414qD9hRoTmKS.png

按下去之後跳出一個彈窗,要我輸入新方法的名字,但我還不知道這段在做什麼,所以我故意留了很怪的名字 NewMehod 給它,讓我之後再回頭來看。彈窗中間有一段 Parameters,告訴我這次抽取方法會出現哪些參數。執得注意的是,底下有好多變數如 buffer、maxBlockSize 等,預設是沒有被勾選的,這代表 Rider 判斷這些東西只會在新方法的 scope 中被用到,所以不需要留在舊方法中。
https://ithelp.ithome.com.tw/upload/images/20250920/20169414RtYk2SYo8T.png

按下去之後,新方法就跑出來了,超棒的。
https://ithelp.ithome.com.tw/upload/images/20250921/20169414FWRqXIo3LD.png

接著我大概看了下 NewMethod 裡面的內容,發現大概都是在做解密的事情。我按下前天學到的 Rename,就先叫它 Decrypt 吧。如果後面有擅長加解密的同事,發現這個名字不好,再交給他處理了。
https://ithelp.ithome.com.tw/upload/images/20250921/20169414OHRN2fcEFr.png

看看最終的結果,GetOrders 變得乾淨許多,雖然 Decrypt 還是很複雜,但我確信裡面的東西跟商業邏輯沒有關係了,可以安心地放在那邊不看。
https://ithelp.ithome.com.tw/upload/images/20250921/20169414YldFKrQblQ.png

我覺得好像還差一點,Rider 好像還想告訴我什麼?算了,明天上班的時候再來聽他說吧~


上一篇
Day 5. Rename 之 2:不止其名,亦正其位
下一篇
Day 7. Show Context Action:來自 IDE 的神諭
系列文
沒測試也敢重構?IDE 安全重構 30 日生存指南14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言