2

FIDO デバイスを使用して Web サイトに登録およびログインするためのバックエンド コード用の単純な API を作成しているときに、小さな問題に遭遇しました。

私は基本的に yubico u2f ライブラリをラップして、さらに使いやすくしています。私が実行した問題は例外です。API からバックエンド サーバーにcom.yubico.u2f.exceptions.NoEligableDevicesException例外をスローしたいのですが、ユーザー (バックエンド開発者) が yubico ライブラリを表示またはインポートする必要はありません。

したがって、私の解決策は、その例外を次のようにラップすることでした。

package com.github.dkanellis.fikey.exceptions;

import com.yubico.u2f.data.DeviceRegistration;

public class NoEligableDevicesException extends com.yubico.u2f.exceptions.NoEligableDevicesException {
    public NoEligableDevicesException(Iterable<? extends DeviceRegistration> devices, String message, Throwable cause) {
        super(devices, message, cause);
    }

    public NoEligableDevicesException(Iterable<? extends DeviceRegistration> devices, String message) {
        super(devices, message);
    }
}

そしてthrow、yubico 例外をラップする例外をユーザーに送信します。問題は、これによりコードが複雑になり、com.yubico.u2f.exceptions.NoEligableDevicesException例外が発生するたびにそれをキャッチしてcom.github.dkanellis.fikey.exceptions.NoEligableDevicesException.

これを行うより良い方法はありますか?

4

1 に答える 1

1

問題は、これによりコードが複雑になり、com.yubico.u2f.exceptions.NoEligableDevicesException 例外が発生するたびに、それをキャッチして com.github.dkanellis.fikey.exceptions.NoEligableDevicesException をスローする必要があることです。

これは問題ではありません。Exceptionこれは、アプリケーションの異なるレイヤー間でを伝播するために実際に推奨される方法です。最近、伝播に関するこの優れた記事に出くわしました。Exception(これは .Net の記事ですが、Java にも適用できます)

actualExceptionを独自のExceptionサブクラスにラップすると、クライアント コードを壊すことなく、API の基礎となる依存関係を柔軟に変更できます。Exceptionクライアント コードは引き続きサブクラスに依存します。

于 2015-06-28T13:12:32.250 に答える