【问题标题】:Wrapper on top of webservice clientWeb服务客户端顶部的包装器
【发布时间】:2012-07-26 09:02:05
【问题描述】:

我有一个返回 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
 } 
}

这是正确的方法吗?我应该只创建一次Client 实例吗?

这种方法会有问题吗?如果两个线程调用getData 方法怎么办 同时。这种情况很可能是因为这是一个基于 Web 的应用程序。

如果与服务器的连接断开又回来怎么办?我不认为这应该是一个问题,因为 http 是无状态的。

【问题讨论】:

    标签: java web-services client


    【解决方案1】:

    一般来说,我认为包装器是个好主意。您可以在不影响其余代码的情况下从 Web 服务重建类。还允许您执行其他操作,例如缓存、安全等。

    如果您打算将 MyClient 设为单例,则 Client c 不需要是静态的。不是什么大事,但值得注意。

    是否存在线程问题取决于 ClientLib.getClient() 的实现。您可能需要阅读以了解是否允许您以多线程方式访问它,或者您是否应该证明同步。但是,通过包装客户端,您可以轻松地将访问同步到一个地方。一般来说,一个 web 服务应该可以从多个线程访问,它只是通过 http 调用。

    我唯一可以建议的另一件事是在 MyClient 上添加一个接口,以解耦使用此类的任何内容。使测试更容易一些。

    【讨论】:

    • :谢谢回复。我还有一个相关的问题。我有许多 web 服务,每个服务提供不同类型的数据。所以每个包装器 getData 返回不同的 bean。而且不同包装器的每个 gedata 接受不同类型的 args 和 args 的差异数量。所以我在那里在基础中提供抽象方法和覆盖它的每个包装器是没有意义的。你能给你的意见吗
    • 不,我认为如此简单的基类不会给您带来任何好处。在编写代码时,您可能会看到一些值得考虑的常见问题。
    猜你喜欢
    • 1970-01-01
    • 2015-05-06
    • 2014-09-04
    • 2015-09-24
    • 2013-02-05
    • 2014-08-17
    • 2011-04-24
    • 1970-01-01
    • 2013-02-03
    相关资源
    最近更新 更多