2012-07-26 3 views
1

웹 서비스 클라이언트를 반환하는 라이브러리가 있습니다.웹 서비스 클라이언트 상단의 래퍼

클라이언트 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 
} 
} 

이이 작업을 수행하는 올바른 방법인가 :

지금 나는 그것의 상단에 래퍼를 만들어 내가 무슨 짓입니까? Client 인스턴스를 한 번만 생성해야합니까?

이 방법에는 몇 가지 문제점이 있습니까? 두 스레드가 getData 메서드 을 동시에 호출하면 어떻게 될까요? 이 상황은 웹 기반 앱 일 가능성이 큽니다.

서버 연결이 끊어지고 다시 돌아 오면 어떻게 될까요? 나는 http가 무국적이므로 문제가되어야한다고 생각하지 않는다.

답변

0

일반적으로 래퍼는 좋은 생각이라고 생각합니다. 나머지 코드에 영향을주지 않고 웹 서비스에서 클래스를 다시 작성할 수 있습니다. 또한 캐싱과 같은 다른 일을 할 수 있습니다, 보안 등

당신이 클라이언트 C 정적 일 필요는 없습니다 다음 싱글, 수 하여 MyClient에하려는 경우

. 거대한 것은 아니지만 주목할만한 가치가 있습니다.

스레드 문제가 있는지 여부는 ClientLib.getClient()의 구현에 따라 다릅니다. 다중 스레드 방식으로 액세스 할 수 있는지 또는 동기화를 증명해야하는지 여부를 확인하려면 약간의 독서를해야 할 수도 있습니다. 클라이언트를 랩핑하면 한 곳에서 쉽게 액세스를 동기화 할 수 있습니다. 일반적으로 웹 서비스는 여러 스레드에서 액세스 할 수 있어야합니다. http를 통한 호출 일뿐입니다.

내가 제안 할 수있는 유일한 다른 점은이 클래스를 사용하는 모든 것을 분리하기 위해 MyClient를 통한 인터페이스를 추가하는 것입니다. 테스트하기 쉽습니다.

+0

: 답장을 보내 주셔서 감사합니다. 나는 하나 더 관련된 질문이있다. 나는 웹 서비스의 숫자가 있고 각 serive는 다른 유형의 데이터를 제공한다. 각 래퍼 getData는 다른 beans를 반환한다. 또한 다른 래퍼의 각 gedata는 다른 유형의 args와 diff 수의 args를 받아 들인다. 기본 및 각 래퍼를 오버라이드하는 추상 메서드를 제공하는 데는 아무런 요점이 없습니다. UR을 제공 할 수 있습니까? – user978939

+0

아니요, 그렇게 단순한 기본 클래스가 아니라면 어떤 이점도 얻을 수 있다고 생각하지 않습니다. 코드를 작성할 때 고려해야 할 공통적 인 사항을 볼 수 있습니다. – pimaster