Rx与响应式编程有何关系?

5
我已经了解了响应式编程的基本概念,即基于源值表达式随时间更改的变量。 我甚至使用表达式实现了{{link1:此功能}}。 但是,当我看着微软的反应式扩展(Rx)时,看到完全不同的东西。 哪里有自我更新的变量? 没有看到任何变量,只有一种通过事件参数枚举的花式方法。

因此,我的问题是:Rx到底有多“反应式”?我们现在看到的功能是否是未来要实现的先驱?还是微软随意地扔出了一个流行词?还是我完全没有理解重点(在这种情况下,我希望您能解释一下)?

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

  1. Rx如何“响应式”?我原以为自更新变量是这个想法的核心,但Rx并没有提供这些。LINQ-to-Events似乎更适合称呼Rx。我开始觉得微软在将其应用于Rx时滥用了“响应式”这个词。
  2. 当前的Rx功能以何种方式可能成为自更新变量的前身?我已经实现了这样的功能,但并没有发现Rx对此有什么有用的东西。

“变量”意味着保持状态。Rx是一种高级抽象,可以组合状态机而无需明确跟踪状态。 - Asti
@Asti - 请建议一个更好的术语使用。 - HappyNomad
1
我在这个问题中没有看到太多主观性 - 似乎是在问一个非常合理的问题。语气有点接近“______很糟糕,对吧?”但我不认为这是意图。 - JDB
@Cyborgx37 - 没错。我知道Rx很有用,但我不明白它为什么被称为“响应式”。 - HappyNomad
@HappyNomad https://dev59.com/cHNA5IYBdhLWcg3wQ7m4 - Asti
显示剩余2条评论
3个回答

7
“响应式”可能更多是一个流行词,但它与另一个语言概念“函数响应式编程”很好地联系在一起...无论如何,“Rx”究竟是什么已经被比我聪明得多的人回答过了,但我也会尝试解释一下:
  • 起初,有一些东西;这些东西有形状,被称为POCOs

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

  • "但是事件呢"人们哀叹道,“它们不适合放在集合和组中!我们必须创建奇怪和外星感的调用和响应处理程序来处理它们!”

  • 就在那时,TheErikTheBart和其他人看着这些奇怪的事件,想到了“嘿,我们可以让它们像POCOs一样运行,因为它们只是IEnumerable<T>的镜像!”

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

  • 然后我厌倦了以“创世纪模式”写作,那些非常聪明的人打包了与LINQ相同的单子查询逻辑以及使用ISchedulers进行“时间旅行”的能力,并将其称为“Rx”


感谢您对 Rx 的精彩描述。请查看问题的编辑。另外,请投票重新打开它,因为它已经被关闭了。 - HappyNomad
我希望我能给这个答案+100。 - smirkingman

2

哦,好的。我认为这里的主要问题是词汇。Rx通常被描述为“事件”或类似物的Linq,并使用称为IObservable的东西实现。

我相信每个刚开始学习Rx的人都会犯同样的错误。当我们看到“事件”这个词时,我们会想到关键字事件/事件处理程序等等......然而,在Rx的上下文中,事件比那更加普遍。它是任何异步发生的事情,很可能在另一个线程上。现在,当然,一种类型的事件是.net事件,使用Observable.FromEventPattern工厂方法创建事件处理程序->IObservables具有一定价值,因为它们的生命周期表示为IDisposable(但稍后再详细讨论)。

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

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

最后,IObservable是一个不幸的名称,因为它让大多数人将其与INPC的想法混淆,因为它看起来类似于ObservableCollection。我向您保证,它并不是那样的。


感谢您对 Rx 的深入描述。请查看问题的编辑。 - HappyNomad

0

响应式编程是基于"数据流"和"变化传播"的概念。

有多种方式来表示这个概念。Rx框架基本上重新审视了传统的基于事件的范式,将其作为事件流的表示,并提供相关操作。


请查看问题的编辑并考虑扩展您的答案。此外,请投票重新打开它,因为它已经关闭。 - HappyNomad
1
正如我所说 - 响应式编程并不一定是关于“自更新变量”,而更多地是关于“数据流”和“变化的传播”。Rx试图解决响应式编程的其他方面。 - Reed Copsey
@Reed_Copsey - 谢谢。我得找时间去读一下那些概念,可能要在维基百科上查阅。尽管如此,看到在SO上有更多的细节也是不错的。 - HappyNomad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接