什么是响应式编程"observable"?



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

如果我看到了一个"可观察的",我怎么会知道它?你能给我一个更好的解释什么是"可观察的"吗?

微软表示,"开发人员用可观察。"我正试图通过这个想法进行推理含蓄地处理这个概念,我想这只是,在数据流中可以观察到的任何内容。代码应为更精确。

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

有三种类型的事件,可观察到可以隐含地发出:

  1. OnNext:T的下一个实例
  2. OnCompleted:非错误(空消息)终止符
  3. OnError:错误终止符

然而,可观察器并不直接发出这些消息,而是只向订阅的观察器发出这些消息。

如果我看到了一个"可观察的",我怎么会知道它?你能给我一个更好地解释什么是"可观察的"?

想象一下,有一项服务可以报告苹果的最新股价。您可以将服务视为可观察的。要获得这些信息,您必须订阅该服务。一旦订阅,该服务可以发出以下三种消息之一:

  1. 次最新股价
  2. 市场关闭
  3. 某种故障(连接故障最为典型)

接下来,您将编写一个处理程序来处理这三种类型的消息。该处理者将是可观察到的价格流的观察者。

来自维基百科:

观察者模式是一种软件设计模式,在这种模式中,一个称为主体的对象维护其从属对象(称为观察者)的列表,并自动通知它们任何状态更改,通常通过调用它们的方法之一。

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

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

将事件发布到流和处理这些事件(处理它们的观察者)都可以异步完成,这提高了可伸缩性。

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

微软使用术语ObserverObservable,而在其他一些被动框架中,他们可能会使用其他术语。《处方入门》可以帮助你进一步阐明这些概念,整本书都是免费的。请注意,本书更喜欢使用序列来指代事件流。

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

没错。事实上,在微软的Rx中,主要核心只是定义观察者和可观察者之间契约的两个接口,其余的几乎都被抽象掉了。

我认为术语各不相同,但如果你搜索功能反应式编程论文,例如在Google Scholar上,你会发现基本概念行为和事件的定义。我认为第一原理的函数反应式编程的一篇论文中的以下两个定义是有代表性的:

行为是一种类型为a的值,它会随着时间的推移而变化

事件是事件发生的时间顺序

直观地说,行为是一个流转换器:无限流的采样时间,并产生无限流的价值观类似地,事件是流转换器,并且可以被认为是一种行为,在每个时间t,事件发生或不发生。

MS似乎将两者融合到了Observable的概念中。

我认为阅读一些背景文件来了解术语是件好事。Conal Elliott的论文是一个良好的开端。如果你想要一个更具互动性的介绍,你也可以参加coursera的反应式编程原理。

最新更新