私はこの問題に関して、より経験豊富な開発者と少し意見の相違があり、他の人がそれについてどう思うか疑問に思っています。私たちの環境は、Java、EJB 3、サービスなどです。
私が書いたコードは、物を取得して物を作成するサービスを呼び出します。私が遭遇した問題は、意味をなさないヌルポインタ例外を受け取ったことです。たとえば、サービスにオブジェクトの作成を依頼すると、nullが返されます。既知の有効なIDを持つオブジェクトを検索しようとすると、nullが返されます。私は自分のコードで何が間違っていたのかを理解しようといくつかの時間を費やしました。私は経験が少ないので、私は通常、何か間違ったことをしたと思いますが、nullリターンの理由はセキュリティであることがわかります。私のサービスを使用しているユーザープリンシパルがターゲットサービスに対する適切なアクセス許可を持っていなかった場合、単にnullを返します。ここにある他のほとんどのサービスもあまり文書化されていないので、明らかにこれはあなたが知っておくべきことです。
これは、サービスと対話するコードを作成する開発者としてはかなり混乱します。サービスに例外があり、ユーザーにこの物をロードしたり、物を作成したりするための適切なアクセス許可がないことを教えてくれるなら、それは私にとってはるかに理にかなっています。そうすると、サービスが期待どおりに機能しなかった理由がすぐにわかります。
サービスを書いた経験豊富な開発者は、データの要求はエラー状態ではなく、例外はエラー状態でのみスローされるべきであり、ユーザーがデータにアクセスできないときではないと主張しました。このデータは多くの場合GUIで検索され、適切な権限のないユーザーの場合、これらは単に「存在しません」。要するに、質問は間違っていないため、例外ではありません。これらのユーザーには「存在しない」ものがあるため、getメソッドはnullを返します。ユーザーがそのモノを作成することを許可されなかった場合、Createメソッドはnullを返します。
これは正常なものですか?何が起こっているのかを知るのがずっと簡単だと思うので、例外を使うことを好みます。そのため、たとえば、nullを返すのではなく、無効なIDを持つオブジェクトを要求した場合にNotFoundExceptionをスローすることも好みます。