2015-02-10 58 views
2

儘管可以將觀察者附加到多個提供者,但推薦的模式是僅將IObserver實例附加到一個IObservable實例。將IObserver分配給多個IObservable實例

取自Observer Design Pattern Best Practices

我沒有看到任何明顯的理由,爲什麼建議只將觀察者分配給一個observable。事實上,我想要做的就是不斷刷新一個取決於多個變化值的統計量。

在我看來,像MSDN建議我創建一個專門的觀察​​員類的實例,我想觀察每一個值,而我的直覺是讓我的統計類直接分配給IObservables。

什麼是「正確」的方式來實現這個,以及爲什麼我不應該把我的類分配給多個observables的原因是什麼?

+1

如果你有一個觀察者,觀察多個observable,你的數據可能會失去同步。那將是我的第一個想法,在你不關心的情況下,那麼這不會是一個問題。當你無法真正從數據集中區分出來時,你如何做出你該做什麼的決定。其次,線程如何實現,這可能會導致問題嗎? – 2015-02-10 13:00:03

+0

我認爲這是一個很好的問題,我期待看看是否會有任何*理智*答案 – Tom 2015-02-10 13:03:58

+0

哦..我認爲Callum已經有一個好點 - 在大多數情況下,當我想觀察多個值,我想來處理那些不同的變化,但我只能在IObserver實現中實現一個OnNext()方法。在我的情況下,這並不重要,但我看到這會如何導致一般問題。不過,我不認爲線程會是一個問題,因爲觀察者可以隨意以任何順序觸發他們的通知。還有其他問題嗎?否則,我會忽略這種「最佳做法」。 – 2015-02-10 13:13:16

回答

1

據我所知,這個「最佳實踐」沒有什麼好的理由。

我只能看到一種情況,您可能想要這樣做,但它當然不構成將此稱爲「最佳做法」的理由。

假設您需要知道發出通知的可觀察者是誰,並且假設observable不通過的value參數標識自己。然後,您必須爲每個observable實例化不同的觀察者,並將observable作爲構造函數參數傳遞給觀察者(* 1)。

在你的情況下,你不需要知道發出通知的可觀察者是誰,所以這種情況不適用於你。 (* 1)事實上,正是爲了避免你不必實例化不必要的觀察者,許多框架都要求任何通知都應該包含對通知發起者的引用。