1

Webサービスクライアントを返すライブラリがあります。

クライアントc=Clientlib.getclient();

今私がしたことは、その上にラッパーを作成することでした:

public class Myclient {

 private static Client c = ClientLib.getClient(); 
 private static instance = new MyClient();

 public static MyClient getInstance(){
  return instance;
 } 

 private Myclient(){
   //singleton
 }

 public Data getDate(Sting id){
  Data1 d1 = cleint.getData();
  convert d1 to Data and return data
 } 
}

これはこれを行う正しい方法ですか?のインスタンスを1回だけ作成する必要がありClientますか?

このアプローチに問題はありますか?getData2つのスレッドが同時にメソッドを呼び出す場合はどうなりますか。これはWebベースのアプリであるため、この状況が発生する可能性があります。

サーバーへの接続が切断されて戻ってきた場合はどうなりますか?httpはステートレスなので、問題になるとは思いません。

4

1 に答える 1

0

一般的に、ラッパーは良い考えだと思います。残りのコードに影響を与えることなく、Webサービスからクラスを再構築できます。また、キャッシュ、セキュリティなどの他のことを行うことができます。

MyClientをシングルトンにする場合は、クライアントcを静的にする必要はありません。大きなことではありませんが、注目に値します。

スレッドの問題があるかどうかは、ClientLib.getClient()の実装によって異なります。マルチスレッド方式でアクセスが許可されているかどうか、または同期を証明する必要があるかどうかを確認するために、ある程度の読み取りが必要になる場合があります。ただし、クライアントをラップすることで、アクセスを1か所で簡単に同期できます。通常、Webサービスには複数のスレッドからアクセスできる必要があります。これはhttpを介した呼び出しにすぎません。

私が提案できる他の唯一のことは、このクラスを使用するものをすべて切り離すために、MyClientにインターフェースを追加することです。テストが少し簡単になります。

于 2012-07-26T09:19:03.847 に答える