我想编写一个库,可以与Web服务器进行通信并将数据从其中泄露给世界其他地方。 Web服务器没什么特别的,它暴露了几个REST方法,主要是GET和POST。IObservable REST客户端
由于我对Reactive Extensions相对较新(但我已经喜欢它),所以我征求了建议。我决定库的接口将暴露IObservables。但我不知道如何实现这一点。我想我有几个选择:
1)公开IObservable<IEnumerable<T>>
。有意义的是,REST服务一次返回所有请求的数据。用户调用Subscribe(),只推送一个IEnumerable,调用OnDone。所以Subscribe()需要被多次调用。
2)公开IObservable<T>
。在某些情况下,我猜可能是一个不错的选择。订阅()只会被调用一次,以获取其他数据,将有方法Refresh()或NextPage()(...)以获取更多数据流。 (当时不是IObservable<T> GetResource...
它可能是一个属性,IObservable<T> Resource { get; }
3)忘记的Rx,通过事件(最糟糕的事情IMO)
4)一些其他的方式做到这一点老式方法?
有这方面经验的人吗?我所关心的是刷新(要求提供新数据),Paging,结合结果并且通常具有良好的可维护性设计。
THX的任何意见
是的,但是Rx的整个想法是否只有一个订阅并将数据推送给调用者?不得不每次都订阅以获得结果不会很反应.. – 2012-08-15 13:55:48
@TomášBezouška - 我认为你错过了关于可组合性的观点。你可能会点击一个按钮或一个计时器,你想发起对Web服务的调用,所以你只需将它们变成观察对象,然后创建一个查询,以任何你喜欢的方式组合所有内容。重要的部分是每个部分执行基本操作,然后整个查询可以是强大的。有道理? – Enigmativity 2012-08-15 14:16:57
好了,让方法Refresh()等会打破这种可组合性,对吧?我想我明白了,thx的澄清。 – 2012-08-15 16:57:15