zoukankan      html  css  js  c++  java
  • Enterprise Library 3.0 体验 Validation Application Block (2)

        在实际的应用中,数据的有效性通常是来自业务方面的,然而对于纷繁的业务规则来讲,仅仅套数据的有效性规则是难以应付的,而且业务需求的不断变更也会反过来影响数据有效性规则的制定。那么如何来应对这种情况呢? EL3.0的开发人员已经充分的考虑到了这种情况,并允许通过使用规则集(RuleSet)来制定多套数据的验证规则,这样开发者可以在验证数据时动态的指定想要使用的验证规则。

        还是以第一篇中讲的Student实体类为例(http://www.cnblogs.com/shenfx318/archive/2007/01/07/613705.html),现在,由于学生编制改革,产生了新的数据规则,新规则要求同年级的学生通过学号区分开来。具体的业务规则如下:

      一年级的学生
             学号:非空、长度9
             姓名:非空
             年龄:18~20

      二年级的学生
             学号:非空、长度12
             姓名:非空
             年龄:20~22

    可以看到,对于2年级的学生,学号的长度由原来的9位增长到了12位,年龄段也和1年级的学生区分开来。这里刚好可以使用我们的规则集(RuleSet)针对同年级的不同需求来制定数据规则。

     1     public class Student
     2     {
     3         private string _stdNo;
     4 
     5         [NotNullValidator]
     6         [StringLengthValidator(99,Ruleset="Grade1")]
     7         [StringLengthValidator(1212, Ruleset = "Grade2")]
     8         public string StdNo
     9         {
    10             get { return _stdNo; }
    11             set { _stdNo = value; }
    12         }
    13         private string _name;
    14 
    15         [NotNullValidator]
    16         [StringLengthValidator(110)]
    17         public string Name
    18         {
    19             get { return _name; }
    20             set { _name = value; }
    21         }
    22         private int _age;
    23 
    24         [Int32RangeValidator(1820,Ruleset="Grade1")]
    25         [Int32RangeValidator(2022,Ruleset="Grade2")]
    26         public int Age
    27         {
    28             get { return _age; }
    29             set { _age = value; }
    30         }
    31     }

    再来编写一个函数,通过验证学生的数据是否符合相应的数据规则来区分这个学生是属于哪个年级的。

     1         static void ValidStudent(Student s)
     2         {
     3             //Valid this student with rule "Grade1".
     4             IValidator grade1Validator = ValidationFactory.CreateValidator<Student>("Grade1");
     5             ValidationResults results = grade1Validator.Validate(s);
     6 
     7             if (!results.IsValid)
     8             {
     9                 Console.WriteLine(s.Name + " is not in grade1 course: ");
    10                 foreach (ValidationResult result in results)
    11                 {
    12                     string errorMsg = "Key: {0}, Message: {1}";
    13                     Console.WriteLine(string.Format(errorMsg, result.Key.ToString(), result.Message.ToString()));
    14                 }
    15 
    16                 Console.ReadLine();
    17             }
    18 
    19             //Valid this student with rule "Grade2".
    20             IValidator grade2Validator = ValidationFactory.CreateValidator<Student>("Grade2");
    21             results = grade2Validator.Validate(s);
    22 
    23             if (!results.IsValid)
    24             {
    25                 Console.WriteLine(s.Name + " is not in grade2 course: ");
    26                 foreach (ValidationResult result in results)
    27                 {
    28                     string errorMsg = "Key: {0}, Message: {1}";
    29                     Console.WriteLine(string.Format(errorMsg, result.Key.ToString(), result.Message.ToString()));
    30                 }
    31 
    32                 Console.ReadLine();
    33             }
    34         }

    生成两个学生的实例进行测试

     1         static void Main(string[] args)
     2         {
     3             //Jack is a grade1 student.
     4             Student grade1Student = new Student();
     5             grade1Student.StdNo = "123456789";
     6             grade1Student.Name = "Jack";
     7             grade1Student.Age = 19;
     8 
     9             ValidStudent(grade1Student);
    10             
    11             //Tom is a grade2 student.
    12             Student grade2Student = new Student();
    13             grade2Student.StdNo = "123456789012";
    14             grade2Student.Name = "Tom";
    15             grade2Student.Age = 21;
    16 
    17             ValidStudent(grade2Student);
    18         }

    运行察看输出结果:

             Jack is not in grade2 course………..
             Tom is not in gread1 course……….

    补充说明:

        可以看到这里我用于验证数据的代码有别于示例1中的代码,是通过调用ValidationFactoryCreate方法实例化一个IValidator,这其实和EL其他的Block一样采用了工厂模式,通过源代码可以看出实际上ValidationValidate方法也是调用的ValidationFactory,这里我只不过是直接使用了ValidationFactory,算是另一种验证方式的演示。

  • 相关阅读:
    sqlite3数据库的简要应用
    5分钟把任意网站变成桌面软件--windows版
    bootstrap-multiselect 的简单使用,样式修改,动态创建option
    jquery自定义进度条与h5原生进度条
    Angular 4+ Http
    Flexible Box布局基础知识详解
    Angular4+路由
    Angular 4 设置组件样式的几种方式
    Angular 4 自定义组件封装遇见的一些事儿
    angular4 中自定义pagination组件
  • 原文地址:https://www.cnblogs.com/shenfx318/p/613719.html
Copyright © 2011-2022 走看看