前端的即時驗證是 UX,後端重驗才是 gate

主張:兩層驗證要有明確分工——前端即時驗證負責回饋,後端在寫入前完整重驗負責保證。前端說什麼一律不採信。

時機送什麼目的
即時驗證cell blur + debounce單列 JSON當下就看到錯
最終提交按下送出整份資料最終把關,任何一列有錯就擋掉整批

即時驗證的觸發條件值得設計:blur 才送(打字過程不送)、欄位白名單、同一列 debounce 合併、停用的列跳過。

為什麼提交時還要全部重驗

不是因為即時驗證漏掉了某些列,而是:

  1. 前端不可信 — 資料在使用者的機器上,可以被改;上傳的檔案是不可信輸入
  2. 有些規則單列驗不出來 — 跨列、跨資料表、需要查資料庫的規則
  3. 時間差 — 從驗證到提交之間,資料庫狀態可能已經變了(別人改了主檔、係數換版)
  4. 它是寫入前的最後一道 — 全有全無比部分寫入好收拾

一個容易被忽略的缺口

即時驗證如果只送「這一列」,那些需要關聯資料才能判斷的規則就驗不到(例如該主檔底下的明細還沒接上來,payload 裡是空的)。這種缺口不會報錯,只會讓使用者以為全綠、送出後才被擋——值得在程式碼裡標記成待補,而不是當成已完成。

相關:用二進位 artifact 當 API 的傳輸格式失敗時只回錯誤集合,讓使用者就地修正