foo(String bar)
특정 기준에 맞는 문자열에서만 작동 하는 메소드 가 있다고 가정하십시오 . 예를 들어, 소문자 여야하며 비어 있거나 공백 만 없어야하며 pattern과 일치해야합니다 [a-z0-9-_./@]+
. 이 방법에 대한 설명서에는 이러한 기준이 명시되어 있습니다.
방법이이 기준에 대한 모든 편차를 기각해야합니까, 아니면 일부 기준에 대해 더 관대해야합니까? 예를 들어 초기 방법이
public void foo(String bar) {
if (bar == null) {
throw new IllegalArgumentException("bar must not be null");
}
if (!bar.matches(BAR_PATTERN_STRING)) {
throw new IllegalArgumentException("bar must match pattern: " + BAR_PATTERN_STRING);
}
this.bar = bar;
}
그리고 두 번째 용서 방법은
public void foo(String bar) {
if (bar == null) {
throw new IllegalArgumentException("bar must not be null");
}
if (!bar.matches(BAR_PATTERN_STRING)) {
bar = bar.toLowerCase().trim().replaceAll(" ", "_");
if (!bar.matches(BAR_PATTERN_STRING) {
throw new IllegalArgumentException("bar must match pattern: " + BAR_PATTERN_STRING);
}
}
this.bar = bar;
}
문서가 가능한 경우 변환되고 변환 된 값으로 설정 될 것임을 나타내도록 변경되어야합니까, 아니면 방법을 가능한 한 단순하게 유지하고 모든 편차를 거부해야합니까? 이 경우 bar
응용 프로그램 사용자가 설정할 수 있습니다.
이를위한 주요 사용 사례는 특정 문자열 식별자로 저장소에서 객체에 액세스하는 사용자입니다. 저장소의 각 오브젝트에는 고유 한 문자열이 있어야 식별 할 수 있습니다. 이 리포지토리는 다양한 방법으로 (sql 서버, json, xml, 이진 등) 객체를 저장할 수 있으므로 대부분의 명명 규칙과 일치하는 가장 낮은 공통 분모를 식별하려고했습니다.
foo
어떤 인수를 받아 들일 것인지에 대해 엄격한 함수를 사용해야하며와 함께 사용할 인수를 "정리"할 수있는 두 번째 도우미 함수가 있어야한다고 주장 할 수 있습니다 foo
. 이러한 방식으로 각 방법은 자체적으로 수행해야하는 작업이 적으며보다 깨끗하게 관리하고 통합 할 수 있습니다. 이 경로를 따라 가면 예외가 많은 디자인에서 벗어나는 것이 도움이 될 것입니다. Optional
대신 비슷한 것을 사용 foo
하고 필요한 경우 예외 를 소비하는 함수를 가질 수 있습니다 .