2011-09-10 7 views
1

이것은 더 많은 디자인 질문입니다.Pojo의 유효성 확인

나는

class MyPOJO { 
    private String memberVariable; 
    MyPOJO(String memberVariable) { 
     validate(memberVariable); 
     this.memberVariable = memberVariable; 
    } 
} 

내 질문은 memberVariable 생성자 매개 변수를 확인하는 동안 우리가 얼마나 멀리 갈 수있다, 같은 정의 된 POJO 클래스가 있습니다. 허용 다음 validate 메소드의 IMPL,

private validate(final String memberVariable) { 
    Validate.isNotNull(memberVariable); // this is basic check. 
    Validate.isTrue(memberVariable.indexOf(" ") == -1); //again a basic check. 
    List<String> validValues = DBFactory.getDB().getValidValues(); 
    Validate.isTrue(validValues.contains(memberVariable)); // checks if the memberVariable value is present in db. 
} 

POJO와의 생성자에서 엄격한 검사를하고 뒤에 인수 것은 우리가 MyPOJO 인스턴스가 어떤 임의 memberVariable으로 생성되지 않을 것이라는 점을 확실 할 수 있다는 것입니다. 제 질문은이 디자인이 좋은지 여부입니다. 또는 POJO에서 검증 로직을 모두 함께 가져와야합니까?

답변

0

입력 유효성 검사가 POJO에 포함되어 있지 않습니다. 이렇게하면 생성 된 인스턴스가 올바른지 보장 할 수 있습니다. 일반적으로 이것은 Design-by-Contract입니다.

0

짧은 대답 : 예. 왜 안돼?

긴 대답 : 예,하지만 ...

  1. 당신이 그것을 검증을 실패 할 경우 수행 할 계획입니까? 어떤 종류의 예외를 던지시겠습니까?
  2. 유효한 값을 검사 할 때이 모든 것을 압축 할 수있는 것처럼 보입니다. 유효한 값으로 null 값이나 간격 값이 없기 때문에 (나는 추정합니다).
+0

OP는 유효성 검사를 위해 apache 라이브러리를 사용하고있는 것으로 추측합니다. 올바르지 않은 인수 예외가 발생하면 정확하게 기억합니다. – Scorpion

+0

@Scorpion commons-lang 3에서, 그들은 사실상 아무 이유없이 NullPointerException을 throw하도록 notNull을 변경했습니다 (Jira 문제는 "고정"이 오랫동안 고정되지 않을 것이므로 닫혔습니다). https://issues.apache.org/ jira/browse/LANG-52? – MetroidFan2002

+0

1. IllegalArgumentException (런타임 예외). 제공되는 값이리스트에없는 경우, 클라이언트가 예외가 * 실행시에 슬로우 될지 어떨지를 모르는 것은 괜찮습니까. 물론 우리는 그것을 문서화 할 수 있지만, 클라이언트가 값 목록을 모른다면 어떻게하면 먼저 pojo를 인스턴스화 할 수 있을까요? 이 물건을 단위 테스트하는 방법? –

0

이건 좋습니다. 객체가 불법 인수로 인스턴스화 될 수없는 경우에는 항상 잘못된 인수 예외를 발생시키는 것이 좋습니다. 이것은 또한 객체를 불변으로 유지하는 데 도움이됩니다.