3

私は小さなライブラリを書いていますが、その中でいくつかの異なるタイプのファイルにアクセスする必要があります。アクセス方法自体はファイル形式によって異なりますが、共通点が多いようで、データソースに接続する方法を記述したクラス階層にインターフェイスを配置しました。

ただし、データソースはパスワードやユーザー権限で保護されている可能性があるため、データを取得するために認証が必要になる場合があります。私の質問は次のとおりです。

  1. 認証が必要な場合に例外をスローすることをお勧めしますか?

    実装をできるだけ公開したくないので、何が起こったのかをユーザーに伝えたいだけです。しかし、認証にはさまざまなもの(ユーザー名、パスワードなど)が必要になる可能性があるため、それらを1つの例外にまとめて、破棄することはできますか?または、「認証が必要」は、例外が通常処理するために使用される例外的な動作ではないため、例外に頼らないより良い方法があるかもしれません。

  2. 認証が必要な場合にスローする例外は何ですか?

    ここで、これを処理するために例外を使用することにしたとします。どの例外をスローする必要がありますか?Java APIに同梱されているいくつかAuthenticationExceptionは、ネーミングサービスで使用されるなど、非常にケース固有であるように見えるため、この要件に適合していないようです。どうすればよいかSecurityExceptionわかりませんが、これが不適切な場合でも、他の人が私のコードとAPIの背後で何が起こっているのかを理解するのを妨げるため、自分の例外をスローしたくありません。

ご入力いただきありがとうございます。これはやや長すぎるか、冗長すぎる可能性があるため、質問を改善する編集は大歓迎です。

4

2 に答える 2

6

AuthenticationException

AuthenticationExceptionログインが必要な場合はメッセージをスローし、パスが適切でない場合はユーザー名またはパスワードが間違っています。

ログインが存在するかどうかを開示しないことをお勧めします。また、HTTPでは、許可されていないアクセスを見つからない場合に非表示にするのが一般的です。したがって、資格情報で接続が許可されていない場合は、接続が存在しないようになります。

于 2011-09-29T16:57:49.583 に答える
1

これは独自のAPIであるため、独自の例外を作成して詳細を伝えることができます...例外に「最も近い」Java例外を使用する必要はありません。

個人的には、コードにtry / catchブロックを追加するのは、面倒で見苦しいと思います。だから私はそれを必要としないAPIを作ろうとしています。

あなたの場合、APIクライアントがアクションをプリフライトできるようにクエリを提供すると、その使用法は次のようになります。

Thing t = new Thing(...);
if(t.needsAuth())
{
  boolean ok = t.doPassword("abc123");
  if(!ok)
    log("wrong password");
}
boolean did= t.doIt();
if(!did)
  log("sorry: " + t.getProblem());
于 2011-09-29T16:48:51.693 に答える