2014-02-17 34 views
7

因此,我一直在閱讀的地方使用Subject<T>是「壞」 - 我贊同這種推理。如何避免在RX中使用受試者

但是,我正在嘗試這種最好的方式來避免使用它並舉例說明。

目前,我有一個抽象類,用於持久化配置類,它有一個受保護的Save()方法,每當更改屬性應該保留該類時調用該方法。該消息將一條消息泵送到Subject<T>,該消息通過IObservable<T>接口公開,串行化服務監聽並串行化該類。這似乎是當時最明顯,最簡單,最快捷的方式。

那麼RX方式如何在不使用主題的情況下做到這一點?我是否會公開一個事件並使用Observable.FromEventPattern()來訂閱它? - 因爲這似乎是一種更復雜的方式。

+1

作爲一個利益的問題,你可以鏈接到一些這些論點?我不認爲我知道足夠的Rx來回答這個問題,但這是我聽到的第一個應該儘量避免使用'Subject'的第一個問題。 – shambulator

+2

@shambulator查看此鏈接以獲取快速解釋:http://introtorx.com/Content/v1.0.10621.0/18_UsageGuidelines.html – jnovo

回答

9

它與其說是使用Subject<T>是壞的 - 必須有的「進入單子」某種方式 - 這是說的學術方式「得到一個IObservable<T>。你需要從某個地方開始。

Subject<T>的問題在訂閱中使用時會出現更多問題,而不是將現有的觀察值鏈接在一起。主題應該只存在於您的Rx機器的邊緣。

如果沒有提供入口點(例如FromEventFromEventPatternFromAsyncReturnToObservable()等)對,那麼你使用Subject<T>工作是完全有效的。而且無需增加額外的複雜性,只是爲了方便使用上述內容之一 - 無論如何,其中大多數都使用主題或主題類構造。

就你而言,聽起來像Subject<T>就好。爲了隱藏實現細節,您可以通過AsObservable()來看看它。