이것은 더 많은 디자인 질문입니다.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에서 검증 로직을 모두 함께 가져와야합니까?
OP는 유효성 검사를 위해 apache 라이브러리를 사용하고있는 것으로 추측합니다. 올바르지 않은 인수 예외가 발생하면 정확하게 기억합니다. – Scorpion
@Scorpion commons-lang 3에서, 그들은 사실상 아무 이유없이 NullPointerException을 throw하도록 notNull을 변경했습니다 (Jira 문제는 "고정"이 오랫동안 고정되지 않을 것이므로 닫혔습니다). https://issues.apache.org/ jira/browse/LANG-52? – MetroidFan2002
1. IllegalArgumentException (런타임 예외). 제공되는 값이리스트에없는 경우, 클라이언트가 예외가 * 실행시에 슬로우 될지 어떨지를 모르는 것은 괜찮습니까. 물론 우리는 그것을 문서화 할 수 있지만, 클라이언트가 값 목록을 모른다면 어떻게하면 먼저 pojo를 인스턴스화 할 수 있을까요? 이 물건을 단위 테스트하는 방법? –