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