2012-07-26 99 views
1

我有一个库,它返回一个web服务客户端。webservice客户端上的包装器

Client 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方法 怎么办?这种情况很可能是因为这是一个基于Web的应用程序。

如果与服务器的连接关闭并返回,该怎么办?由于http是无状态的,我不认为这应该是一个问题。

回答

0

通常我觉得一个包装是一个好主意。您可以从webservice重建类,而不会影响其他代码。您还可以做其他事情一样缓存,安全性等

如果您打算MyClient是单身,那么客户C不需要是静态的。不是一件大事,但值得注意。

是否存在线程问题取决于执行ClientLib.getClient()。您可能需要进行一些阅读以确定是否允许您以多线程方式访问它,或者您是否应该证明同步。通过封装客户端,您可以轻松地在一个地方同步访问。通常一个web服务应该可以从多个线程访问,这只是一个通过http的调用。

我只能建议的其他事情是通过MyClient添加一个接口来解耦任何使用这个类的东西。使测试更容易一些。

+0

:谢谢你的回复。我还有一个相关的问题。我有一些web服务,每个serive提供不同类型的数据。因此,每个包装getData返回不同的beans.also不同包装的每个gedata接受不同类型的args和args的diff数。所以我在那里在基础中提供抽象方法并没有意义,每个包装都包含它。可以给你一些commens – user978939 2012-07-26 09:40:57

+0

不,我不认为基础类如此简单可以让你获益。在编写代码时,您可能会看到一些值得分解的常见事物。 – pimaster 2012-07-28 13:39:53