2010-01-13 3 views
0

그래서 이것은 다소 코딩 스타일에 대한 질문입니다. 여기에서 Bean Validation을 사용하고 있지만 생각은 모든 인터페이스를 자주 변경하지 않는 간단한 구현이있는 인터페이스에서 동일합니다.인터페이스, 정적 내부 클래스 및 모범 사례

@Target({ METHOD, FIELD, ANNOTATION_TYPE }) 
@Retention(RUNTIME) 
@Constraint(validatedBy = PhoneNumber.PhoneNumberValidator.class) 
@Documented 
public @interface PhoneNumber { 
    String message() default "Must Be A Valid Phone Number"; 

    Class<?>[] groups() default {}; 

    Class<? extends Payload>[] payload() default {}; 



    public class PhoneNumberValidator implements ConstraintValidator<PhoneNumber, String>{ 

     public void initialize(PhoneNumber arg0) {} 

     public boolean isValid(String phoneNumberStr, ConstraintValidatorContext unused) { 
      return phoneNumberStr.replaceAll("[^\\d|x]", "").matches("\\d{10,12}(x\\d+$)?"); 
     } 

    } 

} 

그래서, PhoneNumberValidator이 특정 검사기 (또는 생산자 방식이나 인터셉터 등)의 구현이며, 우리가 자주 구현을 바꿀 것 많은 가능성이 없습니다.

구현과 인터페이스를 가까이 배치하여 내 코드에 응집력을 제공하는 좋은 방법입니까 아니면 결합해서는 안되는 코드 두 조각을 단단히 연결하는 코드 냄새입니까?

이런 일을 한 프로젝트에 참여한 적이 있습니까? 그렇다면, 그것은 일을 더 좋게 또는 더 나쁘게 만들었습니까? 그렇지 않다면이 방법이 혼란 스럽습니까?

커뮤니티 위키는 의견을 묻는 것입니다.

답변

0

자주 사용되는 samll 유틸리티 클래스를 중첩합니다. 이 파일은 동일한 파일에서 사용할 수 있고 종종 함수 호출이 덜 필요하기 때문에 이것이 제작자보다 훨씬 간단하다고 생각합니다. 내 "의견"과 연습은 당신과 비슷합니다.