zoukankan      html  css  js  c++  java
  • 微软企业库5.0学习笔记实战数据验证模块

     1 在业务对象上添加验证

      添加对程序集【Microsoft.Practices.EnterpriseLibrary.Validation.dll】和【System.ComponentModel.DataAnnotations】的引用。

      using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;

      定义下面的对象

      

    代码
    public class Customer
        {
            [StringLengthValidator(
    125)]
            
    public string FirstName { getset; }
            [StringLengthValidator(
    125)]
            
    public string LastName { getset; }
            [RegexValidator(
    @"^\d\d\d-\d\d-\d\d\d\d$")]
            
    public string SSN { getset; }
           
            
    public Address Address { getset; }
        }
        
    public class Address
        {
            [StringLengthValidator(
    150)]
            
    public string StreetAddress { getset; }
            [ValidatorComposition(CompositionType.And)]
            [StringLengthValidator(
    150)]
            [ContainsCharactersValidator(
    "sea", ContainsCharacters.All)]
            
    public string City { getset; }
            [StringLengthValidator(
    22)]
            
    public string State { getset; }
            [RegexValidator(
    @"^\d{5}$")]
            
    public string ZipCode { getset; }
        }

      2 对业务对象进行验证

      添加对

      Microsoft.Practices.EnterpriseLibrary.Validation.dll

      Microsoft.Practices.ServiceLocation.dll

      Microsoft.Practices.EnterpriseLibrary.Common.dll

      的引用。

      

    代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Globalization;
    using Microsoft.Practices.EnterpriseLibrary.Validation;
    using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
    using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
    using Entity;

    namespace AOPValidation.ConApp
    {
        
    class Program
        {
            
    static void Main(string[] args)
            {
                Validator
    <Customer> customerValidator = null;
                ValidatorFactory validatorFactory 
    = EnterpriseLibraryContainer.Current.GetInstance<ValidatorFactory>();
                customerValidator 
    = validatorFactory.CreateValidator<Customer>();

                Customer customer 
    = new Customer()
                {
                    FirstName 
    = "1231231233333333333333333333333333333333333333",
                    LastName 
    = "2342424234",
                    SSN 
    = "sdfsd",
                    Address 
    = new Address()
                    {
                        City 
    = "sdf",
                        State 
    = "dsf",
                        StreetAddress 
    = "sdfsdf",
                        ZipCode 
    = "sd"
                    }
                };
               ValidationResults validationResults
    = customerValidator.Validate(customer);
               
    if (!validationResults.IsValid)
               {
                   Console.WriteLine(
    "customer is invalid");
                   StringBuilder sb 
    = new StringBuilder(0);
                   
    foreach (ValidationResult result in validationResults)
                   {
                       sb.AppendLine(
    string.Format(CultureInfo.CurrentCulture, "{0}:{1}",
                           result.Key, result.Message));
                   }
                   Console.WriteLine(sb.ToString());
               }
               
    else
               {
                   Console.WriteLine(
    "customer is valid");
               }
               Console.ReadLine();
            }
        }
    }

      验证的结果显示如下

      

      你会发现只是验证了Customer对象的属性,Address上面也添加了验证attribute,可是没有起到效果。对象里面的属性经常会是另外一个对象的,难道要将对象的所有对象属性都定义一个validator,然后validate一下吗,好像有点麻烦, 有没有解决办法呢?
      有的,只要在Customer的Address属性上面添加一个attribute,【 ObjectValidator】,是的Customer变为下面的形式即可。
      
    代码
      public class Customer
        {
            [StringLengthValidator(
    125)]
            
    public string FirstName { getset; }
            [StringLengthValidator(
    125)]
            
    public string LastName { getset; }
            [RegexValidator(
    @"^\d\d\d-\d\d-\d\d\d\d$")]
            
    public string SSN { getset; }
            [ObjectValidator]
            
    public Address Address { getset; }
        }

       这时候再次运行程序,发现Address的属性也被验证了。

      

     

      3 使用配置实现验证

      

     

      添加需要验证的类,然后为每个类添加验证规则之后,按照上面的图示进行配置(上面只添加了一个类Customer,如果需要用配置验证Address,需要再添加一个Validated Type),去掉业务类上的attribute,再次运行程序。具体的配置步骤和其他模块的配置类似,也可以参考:Microsoft Enterprise Library 5.0 系列(三) Validation Application Block (高级)

      

      就会看到下面的结果,配置的验证规则产生了效果,和在对象的属性上添加attribute是一样的效果。

      

      通过代码和配置都可以在一个属性上面同时添加几个验证,例如:同时长度和内容。

     

     

     [ValidatorComposition(CompositionType.And)]
       [StringLengthValidator(
    150)]
       [ContainsCharactersValidator(
    "sea", ContainsCharacters.All)]
       
    public string City { getset; }
  • 相关阅读:
    mysql 存储过程中的 prepare语句(存储过程中动态增减表字段)
    MYSQL创建分区时候报错
    mysql存储过程调试方法
    磁力块[分块]
    区间最优覆盖问题[差分]
    区间最优覆盖问题[差分]
    导弹防御[差分]
    导弹防御[差分]
    CF10D LCIS[动态规划]
    CF10D LCIS[动态规划]
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1763961.html
Copyright © 2011-2022 走看看