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 }

 

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

转载于:https://www.cnblogs.com/ntcj/archive/2013/03/19/2968653.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值