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

标签 java design-patterns

我有这样的情况:

具有以抽象类作为参数的方法的第三方库:

在服务器端我可以调用这个第三方方法

    public void save(){
    ThirdParty.doSomethingBackground(new Callback() {
    public void done(Exception e) {
    //SOMETHING TO DO
    }
    });
    }

我可以在客户端上调用此方法,执行以下操作:

ServerSide.save() 并传递我的 CallBack 实现,但我不想从客户端看到第三方库,当我更改第三方库时,我需要对这种情况进行透明处理。

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

谢谢

最佳答案

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

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

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

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

关于java - 从客户端调用实现线程事件的服务器端应用程序的方法的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17192257/

相关文章:

java - 使用javascript根据另一个数组对一个数组进行排序

java - 进行 MySQL 备份

java - 加载 Java .properties 文件,获取 java.util.MissingResourceException : Can't find bundle for base name what am I doing wrong?

java - 在文件上使用 renameTo 更改内容

Java - 从 Eclipse 到 Excel 从 SQL 查询

java - 这是否被视为 "Database as an IPC"反模式?

c++ - 如何在不重复代码的情况下统一实现双向转换?

c# - ASP.NET MVC 模型模式 : What works best?

iphone - 如何使用自定义 inputView 设计 iOS 程序

javascript - 是否有为 "javascript revealing module pattern"创建大纲 View 的 eclipse 插件?