`

微软企业库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; }

 

    

分享到:
评论

相关推荐

    微软企业库5.0_学习之路

    ### 微软企业库5.0缓存模块详解 #### 一、缓存的重要性与应用场景 缓存技术作为提升应用程序性能的重要手段之一,在现代软件开发中占据着举足轻重的地位。合理的缓存策略不仅可以显著提高应用响应速度,还能有效...

    [EntLib]微软企业库5.0 学习之路——第六步、使用Validation模块进行服务器端数据验证

    【微软企业库5.0 学习之路——第六步、使用Validation模块进行服务器端数据验证】 微软企业库5.0是微软提供的一套强大的应用程序框架,用于帮助开发者更有效地实现常见的软件开发任务,如日志记录、配置管理、数据...

    微软企业库5.0【EnterpriseLibrary5.0 – May2011】

    微软企业库5.0是该系列的一个重要版本,发布于2011年5月,它为.NET Framework提供了强大的应用程序基础架构服务。 该库主要由以下几个核心组件构成: 1. **数据访问应用块(Data Access Application Block)**:...

    微软企业库5.0学习之路

    ### 微软企业库5.0学习之路 #### 第一步:基本入门 企业库是由微软提供的一个强大的开发框架,主要用于解决企业级应用开发中的常见问题。企业库5.0相较于之前的版本进行了诸多改进,其中最重要的一项是引入了依赖...

    微软企业库5.0 学习之路(全集)

    微软企业库5.0(Enterprise Library 5.0)是微软公司发布的一套用于.NET Framework的应用程序开发框架,旨在帮助开发者更高效、更规范地管理常见的软件开发问题,特别是关注于应用程序的基础设施部分,如数据访问、...

    微软企业库5.0操作日志和缓存模块

    在微软企业库5.0中,缓存管理模块提供了对数据缓存的支持,允许开发者将常用数据存储在内存中,避免频繁的数据库查询。这降低了系统的I/O负担,提升了用户体验。该模块支持多种缓存提供程序,如System.Web.Caching...

    微软企业库 5.0 源码

    总的来说,微软企业库5.0是一个强大的工具集,它将常见的企业级开发任务封装成可重用的模块,降低了开发复杂性,并提高了代码的可维护性。对于.NET开发者而言,无论是直接使用这些应用块还是借鉴其设计思想,都是...

    良葛格java jdk 5.0学习笔记

    良葛格java jdk 5.0学习笔记,良葛格java jdk 5.0学习笔记.zip,良葛格java jdk 5.0学习笔记.zip,良葛格java jdk 5.0学习笔记.zip,良葛格java jdk 5.0学习笔记.zip,良葛格java jdk 5.0学习笔记.zip。

    [EntLib]微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇

    **EntLib.Validation**(微软企业库中的验证模块)便是这样一款工具,它为.NET开发者提供了一套全面的数据验证解决方案。 EntLib.Validation模块不仅支持常见的验证规则,如字符串长度、日期范围、类型转换、正则...

    微软企业库5.0

    微软企业库(Enterprise Library)是微软提供的一套用于.NET Framework应用程序开发的开源工具集,它旨在简化常见的软件设计模式,并提供了实现这些模式的现成组件。这个版本是5.0,通常称为“Microsoft Enterprise ...

    微软企业库5.0说明文档,英文版

    微软企业库(Microsoft Enterprise Library)是微软公司发布的一套用于.NET Framework的应用程序开发框架,它提供了许多可重用的软件组件,旨在简化常见的应用程序开发任务,尤其是与企业级应用程序相关的复杂性,如...

    proe5.0学习笔记

    ProE 5.0学习笔记总结 ProE 5.0是一个功能强大且复杂的三维CAD设计软件,对于刚接触ProE的用户来说,学习和掌握它需要投入很多时间和精力。以下是ProE 5.0学习笔记的总结,包括安装方法、基本操作和advanced操作等...

    Java JDK 5.0学习笔记

    本学习笔记旨在帮助新手全面理解并掌握Java 5.0的关键知识点。 一、泛型(Generics) Java 5.0引入了泛型,它允许在定义类、接口和方法时指定类型参数,从而实现类型安全的集合。泛型消除了强制类型转换的需要,...

    良葛格————JavaJDK5.0学习笔记PDF

    良葛格————JavaJDK5.0学良葛格————JavaJDK5.0学习笔记PDF.rar习笔记PDF.rar良葛格良葛格————JavaJDK5.0学习笔记PDF.rar————JavaJDK5.0学习笔记PDF.rar良葛格————JavaJDK5.0学习笔记PDF.rar良...

    良葛格Java JDK 5.0学习笔记

    Java JDK 5.0是Java发展历程中的一个重要里程碑,它引入了许多新特性,极大地提升了开发效率和代码质量。..."良葛格Java JDK 5.0学习笔记"这份资料应该会详细解释这些概念,为初学者提供宝贵的参考资料。

    Java JDK 5.0学习笔记:TP312JA L393.iso

    Java JDK 5.0学习笔记:TP312JA L393.iso 随书光盘,欢迎大家下载 大家共享^A^

    良葛格Java JDK 5.0学习笔记ch05

    在这个"良葛格Java JDK 5.0学习笔记ch05"中,我们将深入探讨其中的关键知识点。 一、泛型 Java 5.0引入了泛型,这是一项强大的类型安全机制,允许在编译时检查类型。泛型可以应用于类、接口和方法,通过指定参数...

    良葛格Java JDK 5.0学习笔记[可打印]

    良葛格的Java JDK 5.0学习笔记是一份宝贵的资源,适合初学者和有经验的开发者回顾这个版本的关键概念。下面我们将详细探讨Java JDK 5.0中的核心知识点。 1. **泛型(Generics)** 泛型是JDK 5.0引入的一项重要特性...

    [EntLib]微软企业库5.0 学习之路——第三步、为项目加上异常处理(采用自定义扩展方式记录到数据库中).doc

    微软企业库5.0是微软推出的一套用于简化软件开发中常见任务的工具集,尤其在异常处理和日志记录方面提供了强大的支持。本篇文档将聚焦于如何使用微软企业库5.0来为项目添加异常处理机制,并通过自定义扩展的方式将其...

    微软企业库 5.0 (C#) Enterprise Library 5.0 学习资料

    ☆ 资料如下:☆ ☆ 源代码 ☆ Enterprise Library 5.0.msi Enterprise Library 5.0 - Source Code....[Microsoft Press] Microsoft Enterprise Library 5.0 [Packt Publishing] Microsoft Enterprise Library 5.0

Global site tag (gtag.js) - Google Analytics