2011-01-17 5 views
0

Microsoft Enterprise Library를 사용하여 개체의 유효성을 검사하는 질문이 있습니다.
다른 필드에 대한 유효성 검사기가 있습니다. 는하지만 객체의 다른 필드는 다른 규칙 세트에서 (이 예처럼) 할 필요가 : 모든 규칙 세트가 고려되도록Enterprise Library 모든 규칙 집합의 유효성 확인

public class Category 
{ 
[NotNullValidator(MessageTemplate="The category name cannot be null", Ruleset="NameRuleset")] 
[StringLengthValidator(1, 200, MessageTemplate = "The category name must be between {3} and {5} characters", Ruleset = "NameRuleset")] 
public string Name { get; set; } 

[NotNullValidator(MessageTemplate = "The category description cannot be null", Ruleset = "DescriptionRuleset")] 
[StringLengthValidator(1, 2000, MessageTemplate = "The category description must be between {3} and {5} characters", Ruleset = "DescriptionRuleset")] 
public string Description { get; set; } 
} 

문제는 어떻게 객체를 검증 할입니까?

하나의 해결책이 될 수 있지만 항상 매개 변수로 규칙 집합을 전달하고 싶지는 않습니다.

var result = Validation.Validate<Category>(category, new string[] { "NameRuleset", "DescriptionRuleset" }); 

그리고 이것은 단지 (내 예를 들어, 객체는 항상 그 이름이 긴 200 자 이상의 경우에도 유효합니다) 기본 규칙 집합의 유효성을 검사

var result = Validation.Validate<Category>(category); 

그래서 어떤 방식이있다 Validation.Validate()의 각 호출에 대해 수동으로 지정하지 않고 모든 규칙 집합의 유효성을 검사합니까?

+0

왜 당신이 기본 규칙 집합에서 그 검증을 지정하지 않는 것이 좋습니다? – Steven

+0

개별 규칙 세트를 지정 했으므로 한 번에 한 필드의 유효성을 검사하는 단위 테스트를 작성할 수 있습니다. 이를 통해 "이름"필드 (및 이름 필드 만)의 유효성을 검사하는 하나의 테스트를 작성하고 "설명"필드를 검증하는 또 다른 테스트를 작성할 수 있습니다. – Ove

답변

0

속성에 여러 개의 규칙 집합을 사용할 수 있습니다. 따라서 기존 규칙 집합 위에 Name 및 Description 속성 모두에 대해 사용하는 CombinedRuleset을 소개 할 수 있습니다. 그러나 이것은 코드 냄새 인 모든 유효성 검사 규칙을 복제해야합니다.

당신이 릴리스에서 EntLib에 추가 할 룰 세트에 가입 기능을 원하는 경우, 당신은 그들 모두를 유효성을 검사 할 경우가 here

관련 문제