java - 公开远程接口(interface)或对象模型

标签 java eclipse osgi oop

我有一个关于公开异步远程接口(interface)的最佳方式的问题。

条件如下:

  • 协议(protocol)是异步的
  • 第三方可以随时修改数据
  • 命令往返可能很重要
  • 模型应该非常适合 UI 交互
  • 协议(protocol)支持对特定对象的查询,模型也必须如此

作为提高我在这方面缺乏技能的一种方式(并总体上复习我的 Java),我已经开始了 projectxmms2 创建基于 Eclipse 的前端(如下所述)。

所以,问题是;我应该如何将远程接口(interface)公开为一个简洁的数据模型(在本例中,跟踪管理和事件处理)?

我欢迎任何从一般性讨论到模式名称删除或具体示例和补丁的讨论:)


我在这里的主要目标是总体上了解这类问题。如果我的项目可以从中获益,那很好,但我严格地展示它是为了有一些东西可以开始讨论。

我实现了一个协议(protocol)抽象,我称之为 'client' (出于遗留原因)它允许我使用方法调用访问大多数公开的功能,即使它远非完美,我也很满意。

xmms2 守护程序提供的功能包括轨道搜索、元数据检索和操作、更改播放状态、加载播放列表等等。

我正在更新到 xmms2 的最新稳定版本,我想我还不如修复我当前实现的一些明显弱点。

我的计划是在协议(protocol)接口(interface)之上构建一个更好的抽象,允许与守护进程进行更自然的交互。当前'model'实现很难使用,而且坦率地说非常丑陋(更不用说 UI 代码了,这真是太糟糕了 atm)。

今天我有 Tracks我可以用来获取 Track 实例的接口(interface)基于他们的id的类。通过 Collections 执行搜索接口(interface)(不幸的 namespace 冲突),我想我宁愿移动到 Tracks。

任何数据都可以随时被第三方修改,这应该适本地反射(reflect)在模型和分发的更改通知中

这些接口(interface)在连接时通过返回如下所示的对象层次结构公开:

  • 连接
    • 回放 getPlayback()
      • 播放、暂停、跳转、当前轨道等
      • 公开播放状态变化
    • 轨道 getTracks()
      • 跟踪 getTrack(id) 等
      • 公开轨道更新
    • 集合 getCollection()
      • 加载和操作播放列表或命名集合
      • 查询媒体库
      • 公开集合更新

最佳答案

对于异步位,我建议查看 java.util.concurrent ,尤其是 Future<T>界面。 Future 接口(interface)用于表示尚未准备好但正在单独线程中创建的对象。你说第三方可以随时修改对象,但我仍然建议你在这里使用不可变的返回对象,而是有一个单独的线程/事件日志,你可以订阅以在对象过期时得到通知。我很少使用 UI 进行编程,但我相信使用 Futures 进行异步调用会让您拥有响应式 GUI,而不是等待服务器回复的 GUI。

对于查询,我建议使用方法链来构建查询对象,方法链返回的每个对象应该是Iterable。 .类似于 Djangos 模型的方式。假设你有 QuerySet实现Iterable<Song> .然后您可以调用 allSongs()这将返回迭代所有歌曲的结果。或者 allSongs().artist("Beatles") ,并且您将对所有 Betles 歌曲进行迭代。甚至 allSongs().artist("Beatles").years(1965,1967)等等。

希望这有助于作为一个起点。

关于java - 公开远程接口(interface)或对象模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37041/

相关文章:

java - NavigationDrawer 不起作用,它在执行某些操作之前关闭

java - Apache Felix mvn 包

java - 设置 OSGi 包的权限

java - jpa 的未知命名空间 - ServiceMix

android - android SDK中的target SDK选项必须与测试设备Android版本相同吗? (Android SDK基础)

java - 构造函数没有任何返回类型,但是对象是如何创建的呢?

Java 泛型 - 确保实现静态方法

java - Play Framework 2.1.2 国际化不适用于芬兰语字符

java - 如何使用 Apache POI 将文件夹的所有内容写入 Excel 中?

java - 如何包含依赖项目并将 jar 拆分为两个 jar?