Microsoft says,"开发人员使用Observables表示异步数据流。"我试图推理这个想法。如果我要隐含地处理这个概念,我会想象它只是,在数据流中可以观察到的任何东西。代码应该更精确。
我怎么知道"可观察的"如果我看到了吗?你能不能给我一个更好的解释?#34; observable"是
答案 0 :(得分:2)
微软称,“开发人员代表异步数据流 可观察者。“我试图通过这个想法来推理。如果我愿意的话 隐含地解决这个概念,我会想象它只是, 任何可以在数据流中观察到的东西。代码应该是 更准确。
代码实际上更精确。 Observable由IObservable<T>
interface表示。 IObservable<T>
的主要工作是处理IObserver<T>
。这两个协同工作:IObservable<T>
表示可以订阅的T
类型的流。 IObserver<T>
表示订阅observable以处理这些事件的处理程序。
observable可以隐式发出三种类型的事件:
T
但是,observable不会直接发出这些消息,而是只将它们发送到订阅的观察者身上。
如果我看到它,我怎么知道“可观察”?你能给我一个吗? 更好地解释“可观察”是什么?
想象一下报告最新Apple股票价格的服务。您可以将服务视为可观察的服务。要获取此信息,您必须订阅该服务。订阅后,该服务可以发出三条消息之一:
您将依次编写处理程序来处理这三种类型的消息。该处理程序将成为可观察价格流的观察者。
答案 1 :(得分:1)
观察者模式是一种软件设计模式,其中一个称为主体的对象维护其依赖者列表,称为观察者,并通常通过调用其中一种方法自动通知它们任何状态变化。
当应用于用户界面中使用的事件时,此定义很明确:您通过提供按钮在单击时调用的事件处理程序来观察按钮单击。在这种情况下,按钮是一个可观察的按钮,它以事件处理程序的形式通知许多观察者。
应用于反应式编程,可观察的只是您可以订阅的事件流 - 即观察。把它想象成一个事件遍历的管道,你可以窥视它。您可以通过观察流并处理您感兴趣的事件来实现此目的。此外,可以在流上执行操作 - 例如将一对流合并为一个新流。
将事件发布到流中以及处理这些事件 - 处理它们的观察者 - 可以异步完成,从而提高可伸缩性。
类似的概念是消息,主题和订阅者:一些利益相关者可以将消息发布到主题,许多不同的利益相关者可以订阅。它们分别对应于事件,可观察流事件和观察者。
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。