我最近一直在閱讀關於IObservable。到目前爲止,我已經看過各種SO問題,並觀看了他們可以做什麼的視頻。我所想的整個「推動」機制非常出色,但我仍然試圖弄清楚究竟是什麼。從我的閱讀材料來看,我認爲IObservable
是一種可以「觀看」的方式,而IObservers
是「觀察者」。使用IObservable而不是事件
所以現在我要嘗試在我的應用程序中實現這個功能。在我開始之前,有幾件事情我想要堅持下去。我已經看到,IObservable與IEnumerable是相反的,但是,我無法真正看到我的特定實例中可以併入我的應用程序中的任何位置。
目前,我大量使用活動,以至於我看到「管道工程」開始變得難以管理。我會認爲,IObservable可以幫助我在這裏。
考慮下面的設計,這是我的包裝在我的I/O我的應用程序(僅供參考,我通常要處理的字符串)內:
我有一個基本接口被稱爲IDataIO
:
public interface IDataIO
{
event OnDataReceived;
event OnTimeout:
event OnTransmit;
}
現在,我現在有實現此接口的三個班,每個類以某種方式都利用異步方法調用,將某些類型的多線程處理:
public class SerialIO : IDataIO;
public class UdpIO : IDataIO;
public class TcpIO : IDataIO;
有每個類包裹到我的最後一類,稱爲IO的的單個實例(其也實現IDataIO - 粘附到我的策略模式):
public class IO : IDataIO
{
public SerialIO Serial;
public UdpIO Udp;
public TcpIO Tcp;
}
我已經利用策略模式來封裝這些三個類,以便在運行時在不同的IDataIO
實例之間進行更改時,使其對最終用戶「不可見」。正如你所想象的那樣,這導致了背景中相當多的「事件管理」。
那麼,在我的情況下,我該如何利用'推'通知?我不想訂閱事件(DataReceived等),而只想將數據推送給任何感興趣的人。我有點不確定從哪裏開始。我仍然試圖玩弄Subject
的想法/通用類,以及這個(ReplaySubject/AsynSubject/BehaviourSubject)的各種化身。有人可以請這個啓發我(也許參照我的設計)?或者這不是一個理想的適合IObservable
?
PS。隨時糾正任何我的「誤解」 :)
嗨RichK,交易能否請您闡述一下主題屬性?這是如何宣佈的?而這個類的用戶,他們到底會'訂閱'IObservable'DataReceived'。 – Simon
@Simon我做了一些編輯,讓我知道如果你仍然不確定:) – RichK
謝謝,這清除了一些東西了。只是1件事,我假設'dataIo.DataObservable'是'公共IObservable DataObservable''? –
Simon