2014-11-01 3 views
0

나는 ABCValidator, PQRValidator, XYZValidator 등과 같은 몇 가지 유효성 검사기 클래스를 가지고 있습니다.이 모든 클래스에는 단일 매개 변수를 사용하여 유효성을 검사하는 단일 정적 부울 메서드 만 포함되어 있습니다.최고의 프로그래밍 연습

class ABCValidator { 
    public static boolean isValid(abc){ 
     //abc validation logic 
     //return true/false 
    } 

}

안티 패턴이 있는가가 위의 코드에 존재 : ABCValidator 클래스의 예를 들어
?
위의 방법보다는 모든 방법을 하나의 도우미 클래스에 집중 시키면 부작용이 있습니까?
다른 방법으로 더 좋은 방법이 있습니까?

public interface Validator<T> { 
    public boolean validate(T object); 
} 

그런 다음이 인터페이스를 구현하는 클래스를 만들 : 내가 인터페이스를 만들 것

+1

"validator"미니 프레임 워크를 만들려는 경우 정적 방법을 사용하지 않습니다. 이렇게하면 유효성 검사기 개체가 작동하고 유효성 검사기 상태를 사용할 수 있습니다. 또한 제네릭을 활용하여 모든 하위 클래스에서 구현되는 일반 인터페이스를 만들 수 있습니다. 항상 그렇듯이 기존 프레임 워크에서 영감을 얻는 것이 좋습니다. http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html –

+1

올바른 유효성 검사기는 어떻게 선택합니까? 그것은 아마도 안티 패턴 일 것입니다. –

답변

2

. 이렇게하면 다형성 특성을 사용할 수있게되며, 특히 validate 메서드가 DB 또는 웹 서비스로 나가는 것 이상의 계산 작업을 수행하는 경우 테스트를 쉽게 만들 수 있습니다.

+3

일반 인터페이스로 만들 수도 있으므로 다른 유형을 사용할 수 있습니다. 또는 validate 메서드를 Object as type으로 만듭니다. –

+0

@RolfSmit - 맞습니다. 나는 대답을 업데이트 할 것이다. 감사! – Avi

1

다른 사람들이 비슷한 문제를 어떻게 해결했는지 살펴 보겠습니다. http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html

Sanjay에서 제안한 의견을 바탕으로 제네릭을 선호하고 Avi가 제안한 답변을 사용하십시오. 실제로 Effective Java에서 전략을 나타 내기 위해 함수 오브젝트를 사용하는 방법에 대해 읽으십시오. 그리고 아마 당신이 자바 8에 있다면 lambdas에 대해서.

관련 문제