私は 4 層システム (データベース、永続性、ビジネス、プレゼンテーション) を持っています。後の 3 つの層はすべて 1 つの JVM で実行されます。
ビジネス層とプレゼンテーション層の間でいくつかの例外処理の問題に直面しました。非常に単純化された例として、次のコードを検討してください。
public void process(String label) throws ValidationException {
if(label == null) {
// this is a custom exception that means that one of the arguments invalid
throw new ValidationException("The label can not be null.");
}
if(label.length() != 8) {
throw new ValidationException("The label has to be 8 letters long.");
}
... process ...
}
ここでの問題は、無効な引数がプレゼンテーションのせいなのかユーザーのせいなのか、ビジネス タイヤにはわからないことです。
- ラベルがユーザーによって提供された場合、それはユーザーのせいであり、プレゼンテーションは検証例外のメッセージとともに「検証に失敗しました」というメッセージを表示する必要があります。
- 一方、ラベルがユーザー向けのプレゼンテーションによって生成された場合、それはプレゼンテーションの障害 (おそらくバグ) であり、プレゼンテーションは「内部エラー」メッセージを表示する必要があります。
- さらに、ラベルが null の場合、これは 100% プレゼンテーションの問題です。
ユーザー生成の引数とプレゼンテーション生成の引数が混在して渡されると、問題が発生します。この状況では、プレゼンテーションは例外の原因を知ることができません。ユーザーに詳細なメッセージを表示するだけです (ユーザーの過失であれば、ユーザーは原因を知ることができるため)。ただし、ユーザーに詳細なエラー メッセージを表示することは、ユーザーを混乱させるだけなので、プレゼンテーションに問題がある場合は受け入れられません。
このような状況で例外を処理するにはどうすればよいですか? 使用するパターンはありますか?