5

我已经阅读了响应式编程的基本思想,即根据其源值表达式使变量随时间变化。我什至使用表达式实现了这一点。但后来我查看了 Microsoft 的 Reactive Extensions (Rx) 并看到了完全不同的东西。随着时间的推移自我更新的变量在哪里?没有人可以看到。只是通过事件参数枚举的一些奇特方式。

所以我的问题是:Rx 到底有多“反应性”?我们现在在那里看到的功能是未来的前兆吗?还是微软不小心抛出了一个流行词?还是我完全错过了重点(在这种情况下,我希望您解释一下如何)?

编辑: 除了问题被关闭之外,我已经得到了一些关于 Rx 描述的很好的答案。:(但我仍然希望听到更多关于:

  1. Rx 在什么意义上是“反应性的”?我认为自我更新变量是这个想法的核心,但 Rx 不提供这些。LINQ-to-Events 似乎是 Rx 的更好名称。我开始认为微软在将其应用于 Rx 时可能误用了“反应式”这个词。
  2. 当前的 Rx 功能以何种方式成为自更新变量的先导?我已经实现了这样的功能,并没有注意到 Rx 有任何有用的东西。
4

3 回答 3

7

“反应式”可能更像是一个流行词,尽管它确实与另一种称为“函数式反应式编程”的语言概念很好地联系在一起......

无论如何,Rx的“是”已经被比我聪明得多的人回答了,但我会试一试:

  • 起初,有一些东西;这些东西有形状,被称为POCO

  • 这些POCO的集合形成了,因此它们被命名为IEnumerable<T>

  • “但是事件呢?”人们呻吟着哀号,“它们不适合集合和组!我们必须创建奇怪的和外星感觉的呼叫和响应处理程序来应对它们!”

  • 就在那时,TheErikTheBart和其他人看着这些奇怪的事件并想:“嘿,我们可以让他们表现得像POCO一样,因为他们只是 ! 的镜像IEnumerable<T>!”

  • 这就是 的诞生,它的IObservable<T>对偶IEnumerable<T>(对于流“推送”信息给观察者,而不是观察者“拉”出项目)

  • 然后我厌倦了在“创世纪模式”中写作,那些真正聪明的人将相同的单子查询逻辑LINQ与“时间旅行”的能力捆绑在一起,ISchedulers并称之为“Rx”

于 2013-02-08T01:56:44.287 回答
2

好家伙!好的。我认为这里的主要问题是词汇。Rx 通常被描述为 Linq to "Event" 或类似的东西,并使用称为 IObservable 的东西来实现。

我相信每个刚开始使用 Rx 的人都会陷入同样的​​陷阱。当我们看到“事件”这个词时,我们会想到关键字事件/事件处理程序等……但是在 Rx 的上下文中,事件比这更普遍。它是异步发生的任何事情,很可能在另一个线程上。现在当然,一种类型的事件是 .net 事件,使用 Observable.FromEventPattern 工厂方法创建事件处理程序-> IObservables 有一些价值,因为它们的生命周期表示为 IDisposable(但更多关于后来)。

Rx 的另一个用途是数据并行性,因为它与 TPL 数据流有很大的重叠。我用于大型数据并行工作的典型模式是将其转换为 Rx IObservable,然后将处理/线程行为作为 monad 应用。

关于花哨的部分,IObservable 有一个 Linq 提供程序,它允许您使用 Linq 异步处理异步进程(例如使用 TPL 的推测执行)。

最后,IObservable 是一个不幸的名称,因为它导致大多数人将其与 INPC 的概念混淆,因为它看起来类似于 ObservableCollection。我向你保证不是。

于 2013-02-08T01:58:50.337 回答
0

反应式编程基于“数据流”和“变化传播”。

有多种表示方式。Rx 框架基本上是重新审视传统的基于事件的范例,将其作为事件的流式表示,并提供围绕它的操作。

于 2013-02-08T01:54:04.763 回答