我遇到这种情况:
第三方库,其方法使用抽象类作为参数:
在服务器端,我可以使用
调用此第三方方法 public void save(){
ThirdParty.doSomethingBackground(new Callback() {
public void done(Exception e) {
//SOMETHING TO DO
}
});
}
我可以在客户端上调用此方法,例如:
ServerSide.save()并传递我的CallBack实现,但我不想从我的客户端看到第三方库,我需要在更改第三方库时对此情况透明。< / p>
这样做的最佳做法是什么?
韩国社交协会
答案 0 :(得分:1)
创建一个自定义中间对象,其中包含创建自定义Callback实现所需的所有信息。它就像一个简单的DTO。如果您正在使用某种远程处理,那么该对象将是可序列化的。
将此中间对象从客户端传递到服务器。在服务器上,在调用ThirdParty之前将中间对象转换为Callback实现。
从您的问题中不清楚您的ThirdParty库调用是否是异步的。如果您希望ServerSide.save调用是同步的,并且ThirdParty库调用是异步的,那么您可能希望阻止服务器线程并在返回之前等待ThirdParty结果。一种方法是使用Java 6/7的FutureTask类。
如果您不希望ServerSide.save调用是同步的,那么您需要让客户端轮询服务器在另一个服务器调用中查找结果,或者设计双向通信。双向通信通常要复杂得多,并且严重依赖于您正在使用的任何平台/协议/技术。