CJCMS系列--談談后端驗證
4個月過去了,我解放出來一會兒,有點閑空。我的博客也是時候更新一下了,今天我想講講項目中怎么安排后端驗證。
很多人對于后端驗證很煩惱,包括很多項目經理。因為處理不好后端驗證,代碼的可閱讀程度簡直難以形容。
我認為驗證者,有的放矢也。對誰驗證就在哪個上面做文章。我一直認為應該把后端驗證放到數據傳輸對象層面去做,每個數據傳輸對象的屬性都得在設計的時候做好驗證設置,非空就得非空,字符且長度范圍等都得設計好。(可以使用微軟提供的企業驗證類庫或者開源的一些類庫)
數據傳輸對象的構造函數可以申明兩個,其一為顯示空構造;其二為傳參構造;關鍵就在傳參構造這里,在傳參構造之后我們調用統一的泛化過的驗證方法。以this傳出,驗證失敗自然進入異常處理框架中,驗證通過繼續邏輯。
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace MvcApplication1.Models { public class LogOnDTO : IDTO { /// <summary> /// 登陸時發送服務端的用戶名 /// </summary> [NotNullValidator] public string Name; /// <summary> /// 登陸時明文發送服務端的密碼(可以接受js加密后字符) /// </summary> [NotNullValidator] public string PlaintextPwd; /// <summary> /// 登陸時發送服務端的是否保存登陸狀態 /// </summary> [NotNullValidator] public bool IsRemmber; public LogOnDTO() { } public LogOnDTO(string name,string plaintpwd,bool isr) { this.Name = name; this.PlaintextPwd = plaintpwd; this.IsRemmber = isr; ValidationUtil<LogOnDTO>.DoValidate(this); } } }
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 6 namespace MvcApplication1.Models 7 { 8 public static class ValidationUtil<T> where T : IDTO 9 { 10 11 public static void DoValidate(IDTO dto) 12 { 13 if (dto != null) 14 { } 15 else 16 { throw new Exception("驗證出錯- - 報送哪個字段什么問題等等"); } 17 } 18 } 19 }
這樣的設計呢,只讓程序員在設計傳輸對象的時候,注意設計字段的限制,其余的都由系統去處理好了,這樣減輕了程序員的代碼量,同時容易發現問題,解決問題。

浙公網安備 33010602011771號