2016-07-25 4 views
1

데이터 액세스 개체 클래스의 필드를 확인하고 있습니다. 하나의 시도로, 나는 (@NotNull, @NotBlank, @Min, @Max 등과 같은) 속성에 Bean Validation 어노테이션을 추가하기 시작했다. 나는 또한 더 복잡한 주석과 Jackson (JsonProperty (..)) 라이브러리와 문서 (@Api (...))를 가지고있다. 내 의견으로는 클래스는 많은 주석 (각 속성은 최소한 세 개의 주석이 있음)이 매우 "더러 웠"습니다. 하나 개의 필드의 예 : 또 다른 시도에서Bean 유효성 검사와 사용자 정의 유효성 검사 프레임 워크는 언제 사용합니까?

@JsonProperty("ownName") 
@Api(description="it is my own name" required=true) 
@Valid 
@NotNull 
private SomeObject object; 

, 나는 봄 Validator 인터페이스 내 자신의 유효성 검사를 수행했습니다. 스프링 인터페이스와 같은 커스텀 유효성 검사기가 사용된다면 더 깨끗해 보일 수 있고 다른 상황에 대해 하나 이상의 유효성 검사기를 자유롭게 생성 할 수 있습니다. 또한 클래스는 주석이 너무 많이 오버로드되지 않으며 유효성 검사가 클래스와 독립적입니다. Validator의 예 :

public class UserValidator implements Validator { 

    @Override 
    public boolean supports(Class<?> arg0) { 
     return User.class.isAssignableFrom(arg0); 
    } 

    @Override 
    public void validate(Object obj, Errors error) { 
     User user = (User) obj; 
     if(user.getPassword().length() < 10) 
     { 
      error.reject("Password must be lesser than 10"); 
     } 

     //more validations.... 

    } 
} 
  • 하나 또는 다른 사용해야합니까?
  • 각 장단점은 무엇입니까?

답변

2

맛과 유스 케이스라고 생각합니다. 나는 때때로 그것이 일종의 주석 과부하로 끝나는 것을 느끼는 것에 동의한다.

빈 검증을 사용하는 몇 가지 이유는 이것이 표준이라는 것입니다. 제한 어노테이션은 표준화되어 있으며 많은 프레임 워크가 그 프레임 워크와 통합되어 있습니다. 예를 들어, JPA는 또 다른 어노테이션 기반 프레임 워크를 추가하고자 할 때 사용합니다 .-

특정 라이브러리/프레임 워크를 사용하면 Spring과 같은 것을 사용할 수 있습니다. 코드가 덜 휴대 할 수 있습니다. 물론 스프링을 뒤에 남겨 둘 시나리오는 절대로 볼 수 없지만 이것은 중요하지 않을 수 있습니다.

당신이 뭔가 집에 모두 성장을 할 수 물론

하지만,이 경우는 예를 들어, 봄, REST, JPA 등을 위해

또한 범용 검증 프레임 워크를 쓰기로 전체 통합 코드를 작성할 필요가없는 하찮은. 고려해야 할 사항이 많이 있습니다.