Я хочу написать библиотеку, которая свяжется с веб-сервером и выведет данные из него в остальной мир. Веб-сервер не является чем-то особенным, он предоставляет несколько методов REST, в основном GET и POST.Клиент IObservable REST
Поскольку я относительно новичок в реактивных расширениях (но мне это уже нравится), я прошу совета. Я решил, что интерфейсы библиотеки откроют IObservables. Но я не знаю, как именно это реализовать. Я думаю, у меня есть несколько вариантов:
1) Expose IObservable<IEnumerable<T>>
. Имеет смысл, служба REST возвращает сразу все запрошенные данные. Пользовательские вызовы Subscribe(), только один IEnumerable нажат, вызывается OnDone. Поэтому Subscribe() нужно будет вызывать несколько раз.
2) Экспозиция IObservable<T>
. В некоторых случаях я могу быть хорошим выбором. Подписаться() будет вызываться только один раз, чтобы получить другие данные, были бы методы Refresh() или NextPage() (...), чтобы получить больше данных в потоке. (Тогда вместо IObservable<T> GetResource...
это может быть свойством, IObservable<T> Resource { get; }
3) Забудьте Rx, сделать это старомодным способом с помощью событий (неподходящий вещь IMO)
4) каким-либо другим способом?
Любой, у кого есть опыт в этой области? Меня беспокоит Обновление (запрос на новые данные), Пейджинг, объединение результатов и, как правило, хорошая ремонтная конструкция.
Thx за любые советы
Да, но разве идея Rx не имеет единственной подписки и данные передаются вызывающему абоненту? Чтобы подписаться каждый раз, чтобы получить результаты, они не чувствуют себя очень реакционноспособными. –
@ TomášBezouška - Я думаю, вам не хватает точки в отношении способности к работе. Вероятно, у вас будет нажатие кнопки или таймер, который вы хотите инициировать вызовом веб-службы, чтобы просто превратить их в наблюдаемые, а затем создать запрос, который объединяет все вместе любым способом.Важная часть состоит в том, что каждая часть выполняет базовую операцию, и тогда весь запрос может быть мощным. Это имеет смысл? – Enigmativity
Хорошо, и имея метод Refresh() и т. Д., Это сломало бы эту способность, не так ли? Кажется, я понимаю, что для разъяснения. –