`

微软企业库5.0学习笔记(四十四)实战数据验证模块

阅读更多

  1 在业务对象上添加验证

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

  using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;

  定义下面的对象

  

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->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

  的引用。

  

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->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变为下面的形式即可。
  
代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->  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是一样的效果。

  

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

 

 

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> [ValidatorComposition(CompositionType.And)]
   [StringLengthValidator(
150)]
   [ContainsCharactersValidator(
"sea", ContainsCharacters.All)]
   
public string City { getset; }

 

    

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics