2

私が理解しているように、IllegalArgumentExceptionはプログラミングエラーを伝えることを目的としています。

基本的にWebサービスを介したユーザー入力を受け入れるサービスレイヤーを作成している場合、Webサービスがクライアントから提供された不正な引数を渡した場合、これは実際にはプログラミングエラーではないため、IllegalArgumentExceptionは適切ではありませんか独自のサービスレベルの例外を作成する方がよいでしょうか?

4

1 に答える 1

2

はい、プログラミング エラーまたはその他の予期しないアクションまたは不適切なアクションが発生したことを明確にするために、a RuntimeException(および拡張により、a) を使用する必要があります。IllegalArgumentExceptionバグが発見されたというアラームを送信する必要があり、テストによって修正および検証する必要があります。

ただし、設計での責任の割り当て方法によっては、サービス層がIllegalArgumentException. ユースケースの観点からは、ユーザー入力を処理するときはいつでも、無効な値を想定して適切に処理する必要があります。これは、ユース ケースの単なる代替パスであり、絶対に発生するものであるため、実際にはバグではありません。

しかし、無効なユーザー入力への対処は、通常、ユーザー インターフェースの責任であるため、Web ページは不適切な入力を適切に処理し、ユーザーに修正を行う機会を与える必要があります (たとえば、ログイン試行中に誤って入力されたパスワードを入力するなど)。 )。しかし、それは当然のことなので、例外ではありません。重要なのは、リクエストを送信する前に有効性を確認できる場合、ユーザー インターフェイスが無効なリクエストをサーバーに送信しないようにすることです。ユーザー インターフェイスでそれが可能であれば、サービス レイヤーがIllegalArgumentException.

ユーザー ログインの例に戻ると、ユーザー インターフェイスは、入力されたデータが正しくフォーマットされていることを確認することしかできません。値が実際に正しいことを保証することはまったくできません。したがって、ユーザー インターフェイスは、正しくフォーマットされた入力をサービス レイヤーに送信する必要があります。この種のシナリオでは、サービス レイヤーから例外をスローしません。形式は正しくても値が正しくないことが予想されるためです。この場合、ユーザー インターフェイスから送信された値の形式が正しくない場合は例外をスローしますが、単に値が正しくない場合は例外をスローしません。2 番目のケースでは、値が正しくないことをユーザー インターフェイスに返信しますが、例外はスローしません。

この長い答えが役に立てば幸いです-

于 2012-05-22T02:36:43.960 に答える