例として、次のクラスがあるとします。
public class FruitBasket {
private List<Apple> apples;
private List<Orange> oranges;
// getters and setters...
}
を取得するメソッドもどこかにあるとしFruitBasket
ます。
public FruitBasket getFruitBasket() {
//...
}
さらに、getFruitBasket
メソッドがプロキシ経由でアクセスされる 2 つの異なるソースからのデータを集約するとします。たとえば、AppleTree
型のオブジェクトを取得Apple
するサーバーと型のオブジェクトOrangeTree
を取得するサーバーがOrange
あり、どちらも というプロキシを介してアクセスされOrchardGate
ます。これがgetFruitBasket
、getApples
アプリケーションgetOranges
からOrchardGate
.
Apple
オブジェクトとオブジェクトが正常に取得された場合、Orange
問題はなく、FruitBasket
. または の内部、またはとOrchardGate
の両方にアクセスする際に問題が発生した場合は、 の子孫をスローすることでこれを処理することもできます(または、必要に応じて句に追加した場合でも)。AppleTree
OrangeTree
RuntimeException
Exception
getFruitBasket
throws
しかし、部分的な成功の場合はどうなるでしょうか。AppleTree
サーバーに問題なくアクセスできるのに、とOrangeTree
の間のトランスポートの問題が原因でサーバーにアクセスできない場合はどうなりますか?OrchardGate
OrangeTree
私が見る限り、選択肢は 4 つしかなく、どれもまったくひどいものです。
Apple
つまり、オブジェクトが正常に受信されたとしても、オブジェクトがFruitBasket
ないために返されないということOrange
です。- エラーを無視して、
Orange
オブジェクトの空のリストを返すことができました。Orange
これは、クライアントがオブジェクトを検索するときにエラーを確認できずOrange
、サーバー上にオブジェクトが存在しないかのように見えることを意味しOrangeTree
ます。 - にアクセスするときに発生したエラーのリストを含むフィールドを
FruitBasket
calledに追加できます。次に、発生したエラーを示すために呼び出されたリストにエラー コードを追加できます。ただし、このフィールドはドメイン オブジェクトにはまったく属していません。このフィールドは には関連しませんが、 を取得するトランザクションでのみ関連します。errorCodes
FruitBasket
PATH_FLOODED
errorCodes
FruitBasket
FruitBasket
FruitBasket
- 例外をスローできますが、不完全なものを例外に添付し
FruitBasket
ます。例外にはエラー情報のみを含める必要があり、フルーツ バスケットを含めてはならないため、これも恐ろしいことです。
この問題は Java で説明しましたが、この問題は複数の言語に及ぶと思います。私はそれについての議論をまだ見つけていないことに非常に驚いた. 部分的な成功を返すことができるメソッドを記述するための標準的なパターンはありますか? または私が逃したものはありますか?