【最佳实践系列】一种WPF应用程序数据验证模式
来源:互联网 发布:mac翻墙回国的软件 编辑:程序博客网 时间:2024/06/01 09:38
输入数据的验证经常发生在用户录入数据后,在对输入数据进行处理前对其进行检验,确定其是否满足一定的规则。这里介绍一种经验法则,用于频繁的数据验证过程。
注:下面的例子用到一个用于表示均匀分布参数设置信息的类
/// <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
- 【最佳实践系列】一种WPF应用程序数据验证模式
- 【最佳实践系列】一种面向数据的WPF应用框架
- 【最佳实践系列】灵活使用单机应用程序中的数据库
- 【最佳实践系列】WPF多个窗口间消息的实时传递与响应
- WPF MVVM模式实践
- Web应用程序的最佳实践
- DAO模式最佳实践
- DAO模式最佳实践
- 设计模式最佳实践
- 最佳日志数据实践
- 图形验证码最佳实践
- WPF( 数据验证)
- WPF TextBox数据验证
- WPF系列之应用程序生命周期
- 常见系统最佳实践系列
- RxJava系列7(最佳实践)
- 单例模式最佳实践
- Android夜间模式最佳实践
- Android之Fragment
- WIN8/WIN8.1 任务栏经常卡死,资源管理无响应重启的解决方法
- CodeTyphon32中自带例子源码:可拖动的panel
- 黑马程序员——java反射
- Java反射
- 【最佳实践系列】一种WPF应用程序数据验证模式
- 一套完整的安卓开发推荐方案
- 几本对于笔试和面试有用的书
- python MySQLdb连接mysql失败问题
- 浅谈iOS设计模式之单例模式
- MySql自动备份数据库, 数据库主(master)从(slave)配置
- 第11周-八边形Octagon类
- Lodop(V6.x)使用说明及样例
- 【转载】CSS3 常用四个动画(旋转、放大、旋转放大、移动)