非同期リモート インターフェイスを公開する最善の方法について質問があります。
条件は次のとおりです。
- プロトコルは非同期です
- 第三者はいつでもデータを変更できます
- コマンドの往復は重要な場合があります
- モデルは UI インタラクションに適している必要があります
- プロトコルは特定のオブジェクトに対するクエリをサポートしているため、モデルもサポートする必要があります
この分野で不足しているスキルを改善する手段として (および Java 全般をブラッシュアップする手段として)、xmms2用の Eclipse ベースのフロントエンドを作成するプロジェクトを開始しました(後述)。
それで、問題は次のとおりです。リモート インターフェイスを適切なデータ モデルとして公開するにはどうすればよいですか (この場合は、管理とイベント処理を追跡します)。
一般的な議論からパターン名の削除、具体的な例やパッチまで、何でも歓迎します :)
ここでの私の主な目標は、このクラスの問題全般について学ぶことです。私のプロジェクトがそれから利益を得ることができるなら、それは結構ですが、議論を始めるための何かを持っていることを厳密に提示します.
私は「クライアント」と呼ぶプロトコル抽象化を実装しました(従来の理由から)。これにより、メソッド呼び出しを使用してほとんどの公開された機能にアクセスできますが、それは完全ではありませんが満足しています。
xmms2 デーモンによって提供される機能には、トラックの検索、メタデータの取得と操作、再生状態の変更、プレイリストのロードなどがあります。
私は xmms2 の最新の安定版リリースに更新している最中であり、現在の実装の明らかな弱点のいくつかを修正したほうがよいと考えました。
私の計画は、デーモンとのより自然な相互作用を可能にするプロトコル インターフェイスの上に、より良い抽象化を構築することです。現在の「モデル」の実装は使いにくく、率直に言って非常に醜いです (本当に恐ろしい atm である UI コードは言うまでもありません)。
現在、ID に基づいてTrackクラスのインスタンスを取得するために使用できるTracksインターフェイスがあります。検索はCollectionsインターフェイス (残念ながら名前空間の競合) を介して実行されますが、これはむしろ Tracks に移動したいと思います。
どのデータも第三者によっていつでも変更される可能性があり、これは配布されるモデルと変更通知に適切に反映されるべきです
これらのインターフェイスは、接続時に次のようなオブジェクト階層を返すことによって公開されます。
- 繋がり
- プレイバック getPlayback()
- 再生、一時停止、ジャンプ、現在のトラックなど
- 再生状態の変更を公開する
- トラック getTracks()
- 追跡 getTrack(id) など
- トラックの更新を公開する
- コレクション getCollection()
- プレイリストまたは名前付きコレクションを読み込んで操作する
- メディア ライブラリのクエリ
- コレクションの更新を公開する
- プレイバック getPlayback()