How to Integrate Client-Side Form Validation into Legacy Code

如何替陳舊代碼導入 HTML 原生客戶端驗證的故事

背景

近期開始工作遇到些陳舊代碼(Vue 2 + Nuxt 2)需要加入客戶端驗證功能,目前的專案中有各式各樣前人尚未統一的驗證方式,例如:

  • 有些是使用 HTML 原生客戶端驗證
  • 有些是使用第三方套件
  • 有些是使用自造的驗證方法
  • 有些是使用後端驗證

如何統一規範驗證方式是一大問題,同時也要思考:「要如何避免創造更多的陳舊代碼?」

導入客戶端驗證過程

分析各式各樣的可能性,還真的蠻多種選擇的,像是:Vuelidate🔗VeeValidate🔗、樣式庫自帶包裝驗證、自造整套輪子的可能性……

列出導入客戶端驗證的可能性
列出導入客戶端驗證的可能性

最後經過討論目光鎖定在:「原生的客戶端驗證🔗」,基於瀏覽器原生就有客戶端驗證機制,CSS 也有支援相關的選擇器🔗JS 約束驗證 API🔗看似也十分強大,有什麼理由不嘗試使用原生的客戶端驗證呢?

由於這是一門無聊的技術🔗,瀏覽器標準多是優雅降級🔗並且是各大瀏覽器共同遵循的方法,正好適合在我們未來可能轉型(Vue 2 > Vue 3)期間採用,避免大更新後套件兼容問題又遺留更多技術債 😪,是選擇該方向的重點考量。

  1. 能解決問題
  2. 能向後兼容
  3. 相較於導入其他套件更少學習成本

於是很快的在隔天我便提出了第一個可行性方案🔗,讓整個團隊有實際的案例可以參考討論。

都同意走向後,接下來就是要將這個方案導入到既有的代碼中,同樣也在 CodeSandbox 製作了一個理想模型,這裡使用 Vue 元件進行包裝,抽離常用的欄位像是:「發票號碼」、「中文姓名」、「會員 ID」:

未來要使用該欄位時只需要無腦的套用即可,也方便統一管理鎖死了不必要的自由度。由於這些元件都繼承自全域 Input ,對全站的欄位進行改動也十分方便。 同時也盡可能避免多餘的抽象,這些客製化元件可以被當成原生 input 來使用,畢竟我們的陳舊代碼驗證方式可說是五花八門,必須能夠向後兼容導入才行!

總結

前端的技術迭代極快,學會應用最基礎的瀏覽器標準,避免過度依賴套件是我一直十分重視的事情,這次在工作專案中實踐這樣的想法並實踐是一個很棒的經驗,有空我再多寫些工作相關的分享文章吧。