Недавно я читал об 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
?
ПС. Не стесняйтесь исправлять любое мое «недоразумение» :)