【最佳实践系列】一种WPF应用程序数据验证模式

输入数据的验证经常发生在用户录入数据后,在对输入数据进行处理前对其进行检验,确定其是否满足一定的规则。这里介绍一种经验法则,用于频繁的数据验证过程。

注:下面的例子用到一个用于表示均匀分布参数设置信息的类

    /// <summary>
    /// 均匀分布类
    /// </summary>
    public class UniformDistribution
    {
        public double LowerLimit { get; set; }
        public double UpperLimit { get; set; }
        public UniformDistribution(double lw, double up)
        {
            LowerLimit = lw;
            UpperLimit = up;
        }
    }

1、定义一个验证返回类型VerifyResult,其中包含一个int类型的故障码,一个string类型的故障消息,以及一个作为返回值的对象。

    /// <summary>
    /// 验证返回结果类
    /// </summary>
    public class VerifyResult
    {
        public int Code { get; set; }
        public string Message { get; set; }
        public object ReturnedValue { get; set; }
        public bool IsPass
        {
            get { return Code == 0; }
        }
        //构造函数
        public VerifyResult()
        {
            Code = 0; //默认0为通过验证标识
            Message = string.Empty;
            ReturnedValue = null;
        }
    }

2、定义一个类包装验证方法库,由简到繁实现层次化的数据验证

    /// <summary>
    /// 验证方法库类
    /// </summary>
    public class Verifier
    {
        //基本验证:输入正实数
        public static VerifyResult PositiveNumberVerifer(string content)
        {
            VerifyResult result = new VerifyResult();
            double value = 0;
            if (!double.TryParse(content, out value))
            {
                //浮点数解析失败则添加相应错误信息
                result.Code = -1; //给定一个错误码
                result.Message = "请输入数值...";
            }
            else if (value < 0)
            {
                //解析成功但为负数,同样添加相应错误信息
                result.Code = -2; 
                result.Message = "请输入一个正数...";
            }
            else
                result.ReturnedValue = value;
            return result;
        }

        //组合验证器
        public static VerifyResult UniformSettingVerifer(string lowerLimitStr, string upperLimitStr)
        {
            VerifyResult result = new VerifyResult();
            //调用低层次验证器作数字验证
            VerifyResult lowerLimitResult = PositiveNumberVerifer(lowerLimitStr);
            VerifyResult upperLimitResult = PositiveNumberVerifer(upperLimitStr);
            //补充组合验证法则
            if (lowerLimitResult.Code < 0)
            {
                result.Code = -1;
                //组合错误消息
                result.Message = "下限设置格式有误!" + lowerLimitResult.Message;
            }
            else if (upperLimitResult.Code < 0)
            {
                result.Code = -2;
                result.Message = "上限设置格式有误!" + upperLimitResult.Message;
            }
            else if (lowerLimitResult.Code == 0 && upperLimitResult.Code == 0)
            {
                //高层次验证
                if ((double)lowerLimitResult.ReturnedValue > (double)upperLimitResult.ReturnedValue)
                {
                    result.Code = -3;
                    result.Message = "下限值不能大于上限值...";
                }
                else
                {
                    //所有验证通过,构造返回值对象
                    result.ReturnedValue = new UniformDistribution((double)lowerLimitResult.ReturnedValue,
                        (double)upperLimitResult.ReturnedValue);
                }
            }
            return result;
        }
    }
3、 在应用程序中使用输入数据前调用相应的验证函数对数据进行检查,若不返回错误码则继续下一步的处理,否则应通过MessageBox显示错误信息

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            //测试数据验证功能:界面中包含两个文本框tbLowerLimit和tbUpperLimit
            var verify = Verifier.UniformSettingVerifer(tbLowerLimit.Text, tbUpperLimit.Text);
            if (verify.IsPass)
            {
                //使用输入的数据
                var uniform = verify.ReturnedValue as UniformDistribution;
                MessageBox.Show("通过验证");
            }
            else
            {
                MessageBox.Show(verify.Message);
            }
        }
当然,这种方法可以作为WPF数据绑定的验证技术的一部分,实现更完善的验证功能,例如错误信息突出显示等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值