Alpha Camp 學期三「自學經驗」回顧

學期三整個八週的時間總算告一個段落到了尾聲,這段期間說長不長,說短不短,長的在於我又花了一次機會重讀了一個學期,這次總算能好好跟上課程的進度,並且作業也都能夠順利繳交,許多觀念相較於第一次學習和實做,也得以多加練習跟釐清;短則在於藉由這次整個學習下來,了解到後端開發領域水之深的,短短十六週只能算是踏進門,還有許多地方需要靠後續的學習及實戰經驗去累積。以下針對本學期的指標作業『老爸的私房錢』來做一個簡單的回顧。

日期顯示以及日期套件的選擇:

根據設計稿的設計,可以發現到日期顯示的方式是”YYYY/MM/DD”,一開始在創建資料庫的時候,發現在資料類別為Date的時候,預設存入的值為:

可以發現到日期值的呈現並非我們所想的,於是我們需要尋找工具來處理日期資料,而最常聽到的是Moment.js這套,於是一開始便選擇使用Moment.js這個套件來做日期的顯示,然而後來經過助教的建議後:

日期的處理上 moment 是很方便的工具沒錯,不過相對來說因為功能非常多,套件的檔案也非常大,往後用到相關功能可以考慮用 dayjs,相較起來小了非常多哦!

經過比較後發現確實檔案小非常多(Moment.js — 16.7k gz vs Day.js — 2.78k gz),也因此收穫新的工具可以供未來使用。

月份的下拉式選單及資料篩選:

在進階挑戰的項目中,可以發現到上頭下拉式選單多了一項月份,我們可以選擇希望顯示的月份,同時必須對資料庫取得的資料進行篩選,一開始嘗試使用Mongoose所提供的正規表達式用法,如下:

結果執行之後跳出以下的錯誤:

原來Date型別無法使用$regex這樣的query條件,後來有查找到利用區間的做法來篩選日期:

這樣得提供年份的資訊,但是問題是無法預先知道在資料庫的那一筆Record資料的年份為何?最終決定改變date的型別為String,來讓$regex能夠順利篩選出想要的月份資料。

上述的語法為Mongoose所提供,接下來將資料庫從MongoDB轉換為MySQL後,使用Sequelize這套ORM所提供的語法來操作資料庫,發現可以直接篩選月份且日期的型別為DATE:

在操作兩種資料庫時,除了關連式資料庫和非關連式資料庫的差別外,兩者的語法和用法也有不同之處,熟悉度和經驗也佔很大的一部分。

心得:

第一次進入學期三學習時,一開始實作時會發生照著教材的步驟做卻不理解背後的原理,很多地方是該工具或是框架的用法,若要深入理解需要閱讀原始碼或是網路資料庫觀念知識得充足,中途如果進度如果落後,會發現到後面很難追得回來了,還好AC提供了重讀的機會,讓自己能夠放慢腳步,不會被進度追趕而導致許多東西囫圇吞棗的吸收,第二次的學習能順利走完整個學期三,感謝AC提供的教材,助教們的作業批改和建議,繼續朝向下一個階段邁進!