什么是"可观察"在反应式编程?

时间:2015-12-16 08:09:48

标签: system.reactive reactive-programming

Microsoft says,"开发人员使用Observables表示异步数据流。"我试图推理这个想法。如果我要隐含地处理这个概念,我会想象它只是,在数据流中可以观察到的任何东西。代码应该更精确。

我怎么知道"可观察的"如果我看到了吗?你能不能给我一个更好的解释?#34; observable"是

3 个答案:

答案 0 :(得分:2)

  微软称,“开发人员代表异步数据流   可观察者。“我试图通过这个想法来推理。如果我愿意的话   隐含地解决这个概念,我会想象它只是,   任何可以在数据流中观察到的东西。代码应该是   更准确。

代码实际上更精确。 Observable由IObservable<T> interface表示。 IObservable<T>的主要工作是处理IObserver<T>。这两个协同工作:IObservable<T>表示可以订阅的T类型的流。 IObserver<T>表示订阅observable以处理这些事件的处理程序。

observable可以隐式发出三种类型的事件:

  1. OnNext:T
  2. 的下一个实例
  3. OnCompleted:非错误(空消息)终止符。
  4. OnError:错误终止符。
  5. 但是,observable不会直接发出这些消息,而是只将它们发送到订阅的观察者身上。

      

    如果我看到它,我怎么知道“可观察”?你能给我一个吗?   更好地解释“可观察”是什么?

    想象一下报告最新Apple股票价格的服务。您可以将服务视为可观察的服务。要获取此信息,您必须订阅该服务。订阅后,该服务可以发出三条消息之一:

    1. 下一个最新的股票价格
    2. 市场关闭
    3. 某种失败(连接失败最典型)
    4. 您将依次编写处理程序来处理这三种类型的消息。该处理程序将成为可观察价格流的观察者。

答案 1 :(得分:1)

From Wikipedia

  

观察者模式是一种软件设计模式,其中一个称为主体的对象维护其依赖者列表,称为观察者,并通常通过调用其中一种方法自动通知它们任何状态变化。

当应用于用户界面中使用的事件时,此定义很明确:您通过提供按钮在单击时调用的事件处理程序来观察按钮单击。在这种情况下,按钮是一个可观察的按钮,它以事件处理程序的形式通知许多观察者。

应用于反应式编程,可观察的只是您可以订阅的事件流 - 即观察。把它想象成一个事件遍历的管道,你可以窥视它。您可以通过观察流并处理您感兴趣的事件来实现此目的。此外,可以在流上执行操作 - 例如将一对流合并为一个新流。

将事件发布到流中以及处理这些事件 - 处理它们的观察者 - 可以异步完成,从而提高可伸缩性。

类似的概念是消息主题订阅者:一些利益相关者可以将消息发布到主题,许多不同的利益相关者可以订阅。它们分别对应于事件,可观察流事件和观察者。

Microsoft使用术语观察者可观察,而在其他一些反应框架中,他们可能会使用其他术语。 Getting started Introduction to Rx可以帮助您进一步澄清这些概念,整本书都是免费的宝石。请注意,本书更倾向于使用术语序列来引用事件流。

  

我会想象它只是在数据流中可以观察到的任何东西。

那是对的。实际上,在Microsoft的Rx中,主要核心只是定义观察者和观察者之间契约的两个接口接口,其余的几乎被抽象掉了。

答案 2 :(得分:0)

我认为术语各不相同,但如果您搜索功能性反应性编程论文,例如在Google学术搜索中,您将找到基本概念行为和事件的定义。我认为来自Functional Reactive Programming from First Principles的论文中的以下两个定义具有代表性:

  

行为是a类型随时间变化的值

     

事件是一个   时间顺序的事件发生序列

     

直观地说,行为是一个流变换器:一个需要的函数   无限的采样时间流,并产生无限的流   值。同样,事件是流变换器,也可以   被认为是一种行为,在每个时间t,事件也是如此   发生或不发生。

似乎MS融合了Observable的概念。

我认为阅读一些背景文件以获得术语是很好的。 papers from Conal Elliott是一个好的开始。或者,如果您想要更具互动性的介绍,您可以参加课程中的Principles of Reactive Programming