シナリオを描くために、次のロジック省略サービスを検討してください
public class Service {
private Validator validator;
public void submit(Foo foo) {
if (!validator.isValid(foo)) {
log.warn("invalid foo");
} ...
}
}
public interface Validator {
boolean isValid(Foo foo);
}
問題は、検証が失敗する理由を知っているのはそれ自体だけであるということです。その理由でチューニングするための実行可能なアプローチは2つしかありません。どちらかValidor
Validator
- 失敗した状態自体をログに記録します
- 文字列の理由とブール値のisValidを含む複雑なオブジェクトを返します。
前者は素晴らしいですが、Service
ロギングが実際に実行されるかどうかはわかりません。後者は、煩わしい冗長性とより複雑な使用法をもたらします。
どちらを優先するか、またはより良いアプローチがありますか?