FluentObjectValidator는 규칙 구성에 유창한 인터페이스를 제공하는 작고 간단한 검증 라이브러리입니다.
라이브러리는 모델의 속성 기반 유효성 검사 (requirettribute, StringLengthattribute 등)에 대한 대안을 제공하기위한 것입니다.
라이브러리는 .net standart 1.0, .net 4.0, .net 4.5를 대상으로합니다.
라이브러리는 Nuget 패키지로 제공됩니다.
다음은 앱에서 유효성 검사를 구성하는 데 도움이되는 단계입니다.
먼저, 특정 모델이 유효성 검사를 통과하지 않은 경우 수신하려는 정보를 결정해야합니다.
검증 기능을 제공하는 주요 클래스는 다음과 같습니다.
Validator - 유효성 검사가 전달되었는지 여부를 나타내는 부울 값을 반환합니다.Validator<TError> - 부울 가치가 포함 된 ValidationResult<TError> 인스턴스와 정확하게 보여줄 맞춤형 TError 객체 모음을 반환합니다.어떤 유효성 검사기를 사용할 것인지 결정한 후에는 상속을 받고 다음과 같은 구성을 추가하기 만하면됩니다.
public class MyValidator : Validator
{
public MyValidator ( )
{
AddConfiguration ( new ProductDTOConfiguration ( ) ) ;
AddConfiguration ( new UserDTOConfiguration ( ) ) ;
}
} public class MyValidator : Validator < MyCustomError >
{
public MyValidator ( )
{
AddConfiguration ( new ProductDTOConfiguration ( ) ) ;
AddConfiguration ( new UserDTOConfiguration ( ) ) ;
}
}이것은 우리를 다음 단계로 이끌어줍니다.
객체가 따라야하는 규칙을 구성하려면 유효성 검사하려는 각 유형에 대한 구성 클래스를 작성해야합니다.
선택한 유효성 검사기에 따라 모든 구성은 ValidationConfiguration<TObject> 또는 ValidationConfiguration<TObject, TError> 에서 상속됩니다.
ValidationConfiguration<TObject> public class ProductDTOConfiguration : ValidationConfiguration < ProductDTO >
{
public ProductDTOConfiguration ( )
{
Property ( x => x . Title )
. IsRequired ( )
. HasRule ( x => x . Length <= 10 ) ;
}
}속성을 선택한 후 유창한 방식으로 유효성 검사 규칙을 추가 할 수 있습니다.
HasRule 메소드로 규칙을 정의 할 수 있지만 모든 객체에서 사용 가능한 IsRequired 와 같은 몇 가지 사전 정의 된 바로 가기가 있으며 HasMinLength , HasMaxLength , HasLengthInRange , MatchesRegex 문자열에만 사용할 수 있습니다.
유효성 검사는 규칙이 정의 된 순서대로 순차적으로 발생하며 규칙 중 하나가 통과되지 않으면 오자 또는 모두 통과하면 true false 반환합니다.
ValidationConfiguration<TObject, TError> public class ProductDTOConfiguration : ValidationConfiguration < ProductDTO , MyCustomError >
{
public ProductDTOConfiguration ( )
{
Property ( x => x . Title )
. IsRequired ( ( ) => new MyCustomError ( "Title is required" ) )
. HasRule (
x => x . Length <= 10 ,
( ) => new MyCustomError ( "Title is too long" ) ) ;
}
}실패의 경우 사용자 정의 오류를 반환하는 유효성 검사 구성이 조금 더 복잡합니다.
속성을 선택하고 규칙을 정의한 후 규칙이 전달되지 않으면 오류 객체를 작성하는 데 사용되는 대표를 추가해야합니다.
유효성 검사는 규칙이 정의 된 순서대로 순차적으로 발생하지만 규칙 중 하나가 통과되지 않으면 오류가 결과에 추가되고 유효성 검사가 계속됩니다.
특정 규칙이 통과되지 않는 경우 현재 속성 또는 전체 오브젝트에 대한 나머지 규칙을 건너 뛰도록 유효성 검사를 구성 할 수 있습니다. 해당 선택적 부울 매개 변수 stopValidationOnError 및 terminateValidationOnError HasRule 메소드로 전달하여 수행 할 수 있습니다. 둘 다 기본적으로 거짓입니다.
IsRequired 방법은 재산이 NULL과 같으면 다른 규칙을 확인할 필요가 없기 때문에 항상 속성에 대한 나머지 규칙을 건너 뜁니다.
IsRequired , HasMaxLength 와 같은 바로 가기 규칙은 확장 방법을 통해 구현되므로 프로젝트에 자신의 바로 가기를 쉽게 추가 할 수 있습니다.
규칙을 구성한 후 이제 유효성 검사기의 인스턴스를 작성하여 원하는 곳에서 사용할 수 있습니다.
var res = validator . Validate ( obj ) ;각 유효성 검사기는 인터페이스를 통해 사용할 수있는 단일 공개 'Validate'메소드를 노출시킵니다.
public interface IValidator < TError >
{
ValidationResult < TError > Validate < TObject > ( TObject target ) ;
}
public interface IValidator
{
bool Validate < TObject > ( TObject target ) ;
}그렇기 때문에 의존성 주입과 함께 쉽게 사용할 수 있습니다.
services . AddSingleton < IValidator , MyValidator > ( ) container . Register < IValidator < MyCustomError > , MyValidator > ( Lifestyle . Singleton ) ;모든 구성은 유효성있는 인스턴스를 작성하는 동안로드 및 검증되므로 내 생각에 싱글 톤으로 사용하는 것이 가장 좋습니다.
이 프로젝트는 MIT 라이센스에 따라 라이센스가 부여됩니다. 자세한 내용은 라이센스 파일을 참조하십시오.
규칙 구성이 발생하는 방식은 엔티티 프레임 워크 6에서 영감을 얻었으며 엔티티 간의 관계를 구성하는 방식.