2010-07-11 6 views
5

요즘 완전히 다른 것을 찾고있는 중에 .NET에서 Fluent Validation을 수행하는 두 개의 라이브러리를 발견했습니다. 개념은 지금까지 일반적인 조건부 및 분기 구문 (if, else, case 등)을 사용하여 유효성 검사를 수행하고 있으므로 흥미로운 것으로 보입니다.유창한 유효성 검사 및 라이브러리

특히 복잡한 조건의 경우 코드가 짧아지고 동일한 개체의 각 위반에 대해 여러 가지 오류 메시지가 포함될 수있는 조건을 쉽게 연결합니다.

그렇다고해서 코드가 C#보다 더 자세하게 보이지는 않습니다. 보통은 T-SQL처럼 될 수 있지만 ... 코드가 일관성없는 모양을하고 느낌?

간단히 말해서 Fluent Validation에 대해 어떻게 생각하니 마음에 들면 어떤 라이브러리가 가장 좋았습니까? 지금까지 나는 http://tnvalidate.codeplex.com/http://fluentvalidation.codeplex.com/을 보았습니다. 첫눈에 다소 비슷하게 보입니다 ...

고마워요.

답변

2

here을 게시 한 자체 유효성 검사 라이브러리를 사용하고 있습니다.

제안한 두 가지와 다른 점은 유효성 검사가 별도의 유효성 검사 클래스에 포함된다는 것입니다. 유효성 검증 클래스를 작성하고 잊어 버릴 수 있으며 유효성 검증 클래스에 의해 자동 발견됩니다.

public class MyModelValidator : FluentValidator<MyModel> 
{ 
    public MyModelValidator() 
    { 
    Property("FirstName").Required(); 
    Property("LastName").Required().Min(15); 
    } 
} 

public class StringTableProvider : ILanguagePrompts 
{ 
    public string this[string modelName, string propertyName] 
    { 
     get { return Get(modelName, propertyName) ?? "[" + propertyName+ "]"; } 
    } 

    public string Get(string modelName, string propertyName) 
    { 
     return Resource1.ResourceManager.GetString(modelName + "_" + propertyName); 
    } 
} 

(예 : 문자열 테이블로) 당신의 자신의 마음에 드는 현지화 libray를 사용하여 지역화에 대한 지원을 추가하는 것이 쉽게 그리고 구성 :

Validator.LanguageHandler = new StringTableProvider(); 

실제 검증 다음과 같이 수행됩니다.

User user = new User(); 
user.FirstName = "Jonas"; 

var errors = Validator.Validate(user); 
if (errors.Count > 0) 
{ 
    // Handle the errors in any way you like. 
    // both property names (localized and actual property name) and localized error message is accessible. 
} 
2

필자는 혼자서 비슷한 일을 겪었다. 코드를 자세히 작성하지 않았기 때문에 코드를 자세히 작성하지 않았다.

나는 내가 좋아하는 일을하는 내 자신의 검증이 : 지금이 내가 사용하고있어 MVC 아키텍처에 매우 밀접하게 연결되어

Validation.IsNullOrEmpty(m => m.FirstName, modelState); 
Validation.Validate(m => m.ZipCode, z => z.Length == 5, modelState, 
"ZipCode must be 5 characters long"); 

,하지만 나는 읽고보다 더 쉽게 유지 관리 할 수 ​​발견 : 이러한 맥락에서

if (string.IsNullOrEmpty(FirstName)) 
{ 
    ModelState.AddError("FirstName", "FirstName cannot be empty."); 
} 

는 그렇게 눈에 띄는 아니지만, 유효성 검사를 수행 할 때, 당신은 검증 많은 항목을 가질 수 있기 때문에 하나의 라이너 스캔 및 유효성 검사가 수행되고 있는지 파악하기가 훨씬 쉬워진다.

첫 번째 코드를 실행하고 진행 상황을 파악해야하는 것은 처음이지만 일단 지나면 한 눈에 쉽게 라이너를 볼 수 있다고 생각합니다. 두 번째 방법은 여러 블록을 생성합니다.

4

유창한 인터페이스 도우미 클래스를 사용하여 엔진에 규칙을 추가 한 다음 (개체를 확인하는 데 사용됨)도 있습니다.

작문, 교차 입력, 조건부 언어, 다중 언어 등을 지원합니다 ...

+0

매우 감사합니다. –

관련 문제