1

私はこの状況を持っています:

パラメーターとして抽象クラスを持つメソッドを持つサードパーティ ライブラリ:

サーバー側では、このサードパーティのメソッドを次のように呼び出すことができました

    public void save(){
    ThirdParty.doSomethingBackground(new Callback() {
    public void done(Exception e) {
    //SOMETHING TO DO
    }
    });
    }

クライアントでこのメソッドを呼び出して、次のようなことを行うことができます。

ServerSide.save() を呼び出して CallBack の実装を渡しますが、クライアントからサードパーティのライブラリを見たくありません。サードパーティのライブラリを変更するときは、これを透過的に行う必要があります。

そうするためのベストプラクティスは何ですか?

Tks

4

1 に答える 1

1

カスタム Callback 実装を作成するために必要なすべての情報を保持するカスタム中間オブジェクトを作成します。これは単純な DTO に似ています。ある種のリモート処理を使用している場合、オブジェクトはシリアライズ可能になります。

この中間オブジェクトをクライアントからサーバーに渡します。サーバー上で、ThirdParty への呼び出しを行う前に、中間オブジェクトを Callback 実装に変換します。

あなたのサードパーティ ライブラリ呼び出しが非同期であるかどうかは、あなたの質問からは明らかではありません。ServerSide.save 呼び出しを同期させ、ThirdParty ライブラリ呼び出しを非同期にする場合は、サーバー スレッドをブロックし、ThirdParty の結果を待ってから戻る必要があります。これを行う 1 つの方法は、Java 6/7 のFutureTaskクラスを使用することです。

ServerSide.save 呼び出しを同期させたくない場合は、クライアントにサーバーをポーリングさせて別のサーバー呼び出しの結果を探すか、双方向通信を考案する必要があります。ただし、双方向通信は通常、はるかに複雑であり、使用しているプラ​​ットフォーム/プロトコル/テクノロジに大きく依存します。

于 2013-06-19T13:23:44.120 に答える