2つの異なる会社の2つのAPIを使用して、トランザクションを処理するためにサーバーと通信できるようにしています。私は、これらのAPIへの一般的なインターフェイスを作成することが任されています。私は、彼らが自分のリモートサーバーとのインタフェースに提供するAPIを使用していますCompanyAServiceProvider
でこのような状況の例外処理パターンはありますか?
IServiceProvider <- ServiceProvider <- CompanyAServiceProvider
IServiceProvider <- ServiceProvider <- CompanyBServiceProvider
:私はこのような何かを思い付きました。 A社のこのAPIは、B社とはまったく異なる例外をスローします。
私は例外をローカルで処理することができますが、実際にはその状況をスイートとはみなしません。
public String purchase(String amount) {
try {
request = new Request(RequestIF.NEW_ORDER_TRANSACTION);
} catch (InitializationException e) {
//do something.
}
}
それとも私が呼び出し側にこの例外をスローすることができます
public String purchase(String amount) throws Exception {
request = new Request(RequestIF.NEW_ORDER_TRANSACTION);
}
、呼び出し元がちょうどException
関係なく、その例外ではありませんし、関係なく、それをスローどのAPIどんな扱いませんしましょう。
2つの異なる種類のスローされた例外を処理するときに、2つの異なるAPIにインターフェイスを書き込んで、汎用性を維持するにはどうすればよいですか。私はこれを正しく扱っていますか?何が最善の選択でしょうか?
はい、独自のExceptionサブクラスを作成します。 ExceptionをパラメーターとするExceptionコンストラクターをサポートしていることを確認してください。 APIは、このAPIのユーザーにとって意味のある名前の例外を作成することができ、使用しているサードパーティAPIから入ってくる例外を適切にラップすることができます。これはベストプラクティスです。 – Eddie
購入メトール内で、A社のAPIから複数の異なる例外をスローすることはできますか?自分が作成した別の例外クラスでそれぞれをラップしますか? –
元の例外のセマンティクスを提供したい場合は、オリジナルのカスタム例外に基づいて複数の例外クラスを作成することができます。MyException、Failure1ExceptionはMyExceptionなどを拡張します。次に、メソッドに対してMyExceptionを宣言するか、Failure1Exception、Failure2Exceptionなどをリストします。 – akarnokd