将方法从客户端调用到实现线程事件的服务器端应用程序的最佳实践是什么?

时间:2013-06-19 13:16:54

标签: java design-patterns

我遇到这种情况:

第三方库,其方法使用抽象类作为参数:

在服务器端,我可以使用

调用此第三方方法
    public void save(){
    ThirdParty.doSomethingBackground(new Callback() {
    public void done(Exception e) {
    //SOMETHING TO DO
    }
    });
    }

我可以在客户端上调用此方法,例如:

ServerSide.save()并传递我的CallBack实现,但我不想从我的客户端看到第三方库,我需要在更改第三方库时对此情况透明。< / p>

这样做的最佳做法是什么?

韩国社交协会

1 个答案:

答案 0 :(得分:1)

创建一个自定义中间对象,其中包含创建自定义Callback实现所需的所有信息。它就像一个简单的DTO。如果您正在使用某种远程处理,那么该对象将是可序列化的。

将此中间对象从客户端传递到服务器。在服务器上,在调用ThirdParty之前将中间对象转换为Callback实现。

从您的问题中不清楚您的ThirdParty库调用是否是异步的。如果您希望ServerSide.save调用是同步的,并且ThirdParty库调用是异步的,那么您可能希望阻止服务器线程并在返回之前等待ThirdParty结果。一种方法是使用Java 6/7的FutureTask类。

如果您不希望ServerSide.save调用是同步的,那么您需要让客户端轮询服务器在另一个服务器调用中查找结果,或者设计双向通信。双向通信通常要复杂得多,并且严重依赖于您正在使用的任何平台/协议/技术。