【发布时间】:2010-09-07 09:55:17
【问题描述】:
我有一个关于公开异步远程接口的最佳方式的问题。
条件如下:
- 协议是异步的
- 第三方可以随时修改数据
- 命令往返可能很重要
- 模型应该非常适合 UI 交互
- 协议支持对特定对象的查询,模型也必须如此
作为提高我在这方面缺乏技能的一种手段(并全面提升我的 Java),我已经启动了一个 project 来为 xmms2 创建一个基于 Eclipse 的前端(如下所述)。
所以,问题是;我应该如何将远程接口公开为一个简洁的数据模型(在这种情况下,跟踪管理和事件处理)?
我欢迎从一般讨论到模式名称删除或具体示例和补丁的任何内容:)
我在这里的主要目标是了解这类问题。如果我的项目可以从中受益,那很好,但我严格介绍它是为了有一些东西可以开始讨论。
我实现了一个协议抽象,我称之为'client'(出于遗留原因),它允许我使用方法调用访问大多数公开的功能,即使它远非完美,我也很满意。
xmms2 守护程序提供的功能包括曲目搜索、元数据检索和操作、更改播放状态、加载播放列表等等。
我正在更新到 xmms2 的最新稳定版本,我想我不妨修复当前实现的一些明显弱点。
我的计划是在协议接口之上构建一个更好的抽象,一个允许与守护进程更自然交互的抽象。当前的'model' 实现很难使用,坦率地说相当丑陋(更不用说真正可怕的 UI 代码了)。
今天我有了Tracks 接口,我可以使用它来根据id 获取Track 类的实例。搜索是通过Collections 接口(不幸的命名空间冲突)执行的,我认为我宁愿将其移至Tracks。
任何数据都可以随时被第三方修改,这应该在模型和分发的变更通知中得到适当的反映
这些接口在连接时通过返回如下所示的对象层次结构公开:
- 连接
- 回放 getPlayback()
- 播放、暂停、跳转、当前曲目等
- 显示播放状态更改
- 跟踪 getTracks()
- 跟踪 getTrack(id) 等
- 公开曲目更新
- 集合 getCollection()
- 加载和操作播放列表或命名集合
- 查询媒体库
- 公开集合更新
- 回放 getPlayback()
【问题讨论】: