У меня вопрос о том, как наилучшим образом использовать асинхронный удаленный интерфейс.
Условия следующие:
- Протокол асинхронный
- Третье лицо может изменить данные в любое время
- Командный обход может быть значительным
- Модель должна хорошо подходить для взаимодействия с пользовательским интерфейсом
- Протокол поддерживает запросы к определенным объектам, как и модель
Чтобы улучшить свои недостающие навыки в этой области (и в целом освежить свою Java), я запустил проект по созданию внешнего интерфейса на основе Eclipse для xmms2 (описано ниже).
Итак, вопрос в том; как мне представить удаленный интерфейс как аккуратную модель данных (в данном случае, отслеживать управление и обработку событий)?
Я приветствую все, от общих обсуждений до удаления имен шаблонов или конкретных примеров и патчей:)
Моя основная цель здесь - узнать об этом классе проблем в целом. Если мой проект может извлечь из этого пользу, хорошо, но я представляю его строго для того, чтобы начать обсуждение.
Я реализовал абстракцию протокола, которую я называю «клиентом» (по унаследованным причинам), которая позволяет мне получать доступ к большинству предоставляемых функций с помощью вызовов методов, которыми я доволен, даже если это далеко не идеально.
Функциями, предоставляемыми демоном xmms2, являются такие вещи, как поиск дорожек, поиск и обработка метаданных, изменение состояния воспроизведения, загрузка списков воспроизведения и т. Д. И т. Д.
Я нахожусь в процессе обновления до последней стабильной версии xmms2, и я подумал, что мог бы также исправить некоторые явные недостатки моей текущей реализации.
Мой план состоит в том, чтобы построить лучшую абстракцию поверх интерфейса протокола, который позволяет более естественное взаимодействие с демоном. Текущая реализация 'model' сложна в использовании и, откровенно говоря, довольно некрасива (не говоря уже о UI-коде, который действительно ужасен).
Сегодня у меня есть интерфейс Tracks , который я могу использовать для получения экземпляров классов Track на основе их идентификатора. Поиск выполняется через интерфейс Collections (неудачное столкновение пространства имен), который, я думаю, я бы предпочел переместить в треки.
Любые данные могут быть изменены третьей стороной в любое время, и это должно быть надлежащим образом отражено в модели и распространяемых уведомлениях об изменениях
Эти интерфейсы открываются при подключении, возвращая иерархию объектов, которая выглядит следующим образом:
- Подключение
- Воспроизведение getPlayback ()
- Воспроизведение, пауза, прыжок, текущий трек и т. Д.
- Отображение изменений состояния воспроизведения
- Треки getTracks ()
- Отслеживание getTrack (id) и т. Д.
- Выставлять обновления треков
- Коллекции getCollection ()
- Загрузка и управление списками воспроизведения или именованными коллекциями
- Запрос библиотеки мультимедиа
- Выставлять обновления коллекции