Использование IObservable вместо событий

Я недавно читал о IObservable. До сих пор я смотрел на различные вопросы SO и смотрел видео о том, что они могут сделать. Весь "толчок" Механизм, который я думаю, блестящий, но я все еще пытаюсь понять, что именно все делает. Из моих чтений, я думаю, в некотором смыслеIObservable является чем-то, что можно «наблюдать», иIObservers являются «наблюдателями».

Так что теперь я собираюсь попробовать реализовать это в своем приложении. Есть несколько вещей, которые я хотел бы обсудить, прежде чем начать. Я видел, что IObservable является противоположностью IEnumerable, однако я действительно не вижу никаких мест в моем конкретном экземпляре, которые я могу включить в свое приложение.

В настоящее время я интенсивно использую события, настолько, что вижу «слесарное дело»; начинает становиться неуправляемым. Я думаю, что IObservable может помочь мне здесь.

Рассмотрим следующую схему, которая является моей оболочкой для моего ввода / вывода в приложении (к вашему сведению, мне обычно приходится иметь дело со строками):

У меня есть базовый интерфейс под названием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 экземпляры во время выполнения делают его «невидимым»; до конечного пользователя. Как вы могли догадаться, это привело к довольно небольшому количеству событий. на заднем фоне.

Итак, как я могу использовать «push»? здесь уведомление в моем случае? Вместо подписки на события (DataReceived и т. Д.) Я хотел бы просто отправить данные любому, кто заинтересован. Я немного не уверен, с чего начать. Я все еще пытаюсь поиграть с идеями / общими классамиSubjectи различные воплощения этого (ReplaySubject / AsynSubject / BehaviourSubject). Может ли кто-нибудь, пожалуйста, просветить меня об этом (может быть, со ссылкой на мой дизайн)? Или это просто не идеально подходит дляIObservable?

PS. Не стесняйтесь исправлять любое из моих «недоразумений»; :)

Ответы на вопрос(3)

Ваш ответ на вопрос