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 }
这样的设计呢,只让程序员在设计传输对象的时候,注意设计字段的限制,其余的都由系统去处理好了,这样减轻了程序员的代码量,同时容易发现问题,解决问题。