私のソフトウェアの1つでは、基本的にプロトコルの実装であるライブラリを使用しています。ライブラリは、5つの最初のOSIレイヤ(物理からセッション)によって構成されています。ハンドルの例外の原因が異なります
私は、このインターフェイス
public interface ReadSession {
Iterable<byte[]> read(boolean fromStart, byte dataset, int nbData) throws SessionException;
}
とのセッション層を使用する必要が今私の問題は、私は異なる動作をする私のソフトウェアを必要とする原因(など、または内部のインナー)インナーによると、ということです。
例(>インナー原因関係を表す):
SessionException > IOException > ...
場合、私は、私は例外を記録する必要があり
SessionException > TransportException > NetworkException > ...
場合はすべての通信を中止し、次の通信を続行する必要があり
場合SessionException > TransportException > GatewayException > ...
私は、ゲートウェイに問題があることをユーザーに警告する必要があります
しかし、私が今まで持っているものはすべて単一のキャッチです
catch(SessionException e) {
//How to handle this problematic properly ?
}
ので、私はgetCause()
への呼び出しの固定数で快適な自分自身をない感じ:私は、ライブラリの実装の詳細に依存している
- (leaky abstraction)将来これらの変化が起こるなら、私はうんざりしています
誰もすでにこのような状況に直面していて、彼についての知識を共有したい人はいますかできるだけきれいに扱いますか?
「getCause()」を呼び出さないと原因をどうやって知ることができますか? – Berger
@Berger私は 'getCause()'を今までに呼び出すことはできません。しかし、私は 'getCause()'のチェーンをハードコードすることを避けたいと思います。おそらくいくつかのループですか? – Spotted
ライブラリーの実装の詳細に頼らないでください。クリーンな方法でそれを行う方法は他にありませんか? –