我想編寫一個庫,可以與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