菜雞新訓記 (7): 使用 Fluent Validation 來驗證參數吧
這是俺整理公司新訓內容的第七篇文章,目標是紀錄 Fluent Validation 這個好用套件。
FluentValidation 可以幫我們將 Api 傳入的參數的檢查用更口語、更乾淨的方式去處理,除了可以將檢查邏輯拆分成單獨的 Validator 類別,更提供了許多內建的檢查規則和自訂的彈性,相當方便。
並且因為將參數的檢查邏輯整理出去,就可以和 Controller 本身的工作做簡單的拆分,達到關注點分離的目標。
現在就讓我們來認識一下這個好用工具吧!首先要從很久很久以前開始說起…
前言
西元前的某一天,憂心的皇帝在朝堂內繞著柱子走,突然大臣奪門而入。
大臣:「陛下!敵軍已經攻到國境內啦!」
皇帝大驚:『邊境的那些檢查站和關口難道都陷落了嗎?不可能!』
大臣:「陛下,有內奸和敵國勾結,檢查站完全沒檢查!髒資料已經闖進來了!」
皇帝喊了一聲:『怎麼可能!讓朕看看!』就打開 Controller 和前一個版本的 Git Log,這一看差點就昏了過去。
原來 Controller 的舊程式碼就已經很亂了,檢查參數的條件 if/else 和其他呼叫的方法、組裝資料都雜在一起。結果這次專案改動時,某一行就被內奸改壞了,關鍵的參數竟然沒檢查到!
『可,可惡!來人啊,把工程師推出午門斬首!』
「皇上!他已經離職啦!」
皇帝跌坐在地,懊悔地說:『如果當初有好好把檢查參數跟實際組資料的部份都拆開的話,也許就不會這樣了…』
「是啊,如果我們有用 Fluent Validation…!」
專案現況
大臣提到的 FluentValidation 是一套能幫我們把傳入參數的分離出去、用更口語化的方式去撰寫的工具。
……如果當時他們有使用 Fluent Validation 來把驗證的邏輯和規則跟原本很亂的 Controller 切分的話,說不定就能及時發現問題吧,大概。
為了不要步上他們的後塵,就讓我們直接回到本系列的卡牌管理 API 服務來加上這個好用工具吧!
……