foo(String bar)
特定の条件を満たす文字列に対してのみ動作するメソッドがあるとします。たとえば、小文字である必要があり、空または空白のみでなく、パターンに一致する必要があります[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;
}
そして2番目の寛容な方法は
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
受け入れる引数に厳密な厳密な関数を用意し、使用する引数を「クリーン」にしようとする2番目のヘルパー関数を用意する必要があると主張できますfoo
。このように、各メソッドはそれ自体で行う必要が少なく、よりきれいに管理および統合できます。そのルートを下る場合、例外が多い設計から離れることもおそらく役立つでしょう。Optional
代わりに次のようなものを使用しfoo
、必要に応じて例外をスローする関数を使用できます。