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 }

 

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

posted @ 2013-03-19 10:35  不要理我  阅读(1079)  评论(0编辑  收藏  举报