專案簡介 - 匯率爬蟲小工具(下)

這是 AC 結業後第一個 MVP 自主專案。專案介紹分為上下兩篇文章,本文為下篇,著重在心得與反思。技術與專案建置過程請見上篇文章

永遠的課題:寫出清晰易讀的code

自主專案經驗的珍貴,就在於「一切都自己來」。小至變數、函式的命名,大至功能規格、專案架構,全部都沒得 fork,自己想!以下是在這個專案過程中注重的地方:

1. 一個function只做一件事情

基本中的基本,目的是降低耦合性。雖然說是基本,但在寫的過程中也是要特別留心,不要寫得太順一口氣寫完,會像文章忘記分段一樣,會讓其他人(或是下星期的自己)搞不清楚段落重點。也會增加未來查找修改、以及串接其他功能時的困擾。

2. function 分類

我的想法是,這個專案運行邏輯有三大步驟:爬蟲取得需要資訊 -> 將資訊更新於特定 Google Sheet 中 -> 發送 Line Notify。所以我的專案 controller 檔案有三個,分別對應這三大步驟所需要的功能。

由於更新 Google Sheet 時需要取得認證,另外也需要各種操作 Google sheet 的 function(例如新增 tab、插入新列等等),這些我認為是「引用外部 api」,故歸類至 helper。讓這些 function 方便重複使用,另外也同上段所述:將 function 分類,分開主程式邏輯與操作 Google sheet 的函式,方便閱讀理解。

3. 思維與資料的流動

定義 function 處理的內容之後,其實自己心裡就要清楚這個 function 的 input 是什麼,最後 output (return) 出什麼東西,不僅會在變數命名、邏輯撰寫上維持清晰的思維脈絡,也助於不同 function 間的邏輯串接,讓程式跑出想要的結果。


紀錄的重要性

不像在 AC 進度制課程學習的時候,一個 project 會在一兩週內完成,做這個專案的時期,生活中有很多事情在同時進行,今天寫到一半,下次回來可能是兩三天、也可能是超過一星期之後了,直到功能接近完成時我才開始考慮撰寫專案介紹的部落格(也與 hexo 框架相見恨晚),寫的時候要拚命回想過程實在有點累人啊!之後做個人專案的時候,考慮在專案底下加個開發日誌來記錄過程。


思考與未來目標

1. 快速完成專案初始環境設定

這種瑣碎的事情,透過多做幾個專案的經驗,未來應該要可以很快速的完成。之前在 AC 學習期間有對全端網頁架構做一個自己的專案設定 cheat sheet,不知未來是否能做個 template 或是小工具一鍵跑完(?)

2. 何時該重構?

本次專案雖然是有參考書籍,但是在檔案架構上,我是用我所習慣,一開始都會把功能寫在主程式中,再隨著專案功能一一建置出來再調整。專案過程中中間有經過兩次較大規模的重構。思考是否在專案規格、規劃時期,就該規劃好各個 controller 分類以及所需要的 function 呢?或是為了讓程式碼清晰,或也不一定第一次就寫出合理的資料流動方式,程式碼重構總是無可避免,只要是往好的方面重構就是好的呢?這些問題大概要在往後多寫多閱讀、多體會了。

後記

後續發現此專案的潛在問題:Chrome版本更新速度快,需依照使用端的 Chrome 版本,運行對應版本的 Chrome Driver。

在 selenium 啟動時需要 Chrome Driver,需要在ChromeDriver downloads下載對應使用端瀏覽器版本的 driver,並放在專案根目錄下。專案起始的時候 Chrome 是 105 版,後來我的瀏覽器自動更新為 107 版時,程式就不能啟動,並且提示原因為 driver 版本問題(如下圖)。
Terminal回報Chrome driver版本已不同