我已经读过反应式编程的基本思想,即根据源值表达式随时间变化的变量。我甚至使用了表达式implemented this。但后来我看看微软的Reactive Extensions(Rx)并看到完全不同的东西。随着时间的推移,自我更新的变量在哪里?没有人看到。只是通过事件参数枚举的一种奇特方式。
所以我的问题是:Rx真的是“反应性”的吗?我们现在看到的功能现在是未来的前奏吗?或者是微软不小心抛出一个流行词?或者我完全忽略了这一点(在这种情况下,我希望你解释一下)?
修改 我已经对Rx的描述得到了一些很好的答案,此外还有问题被关闭了。 :(但我仍然希望听到更多的内容:
答案 0 :(得分:7)
“Reactive”可能更像是一个流行语,但它确实与另一种称为“功能反应式编程”的语言概念很吻合......
无论如何, Rx “是”已被比我更聪明的人回答,但我会试一试:
一开始,有事情;这些东西已经形成,被称为 POCOs
形成了这些 POCO 的集合,因此它们被命名为 IEnumerable<T>
“但事情是什么”人们呻吟和哀嚎,“他们不适合收藏和群体!我们必须创造奇怪和外星感觉的呼叫和响应处理程序来应对他们!”
就在那时TheErik,TheBart和其他人看着这些奇怪的事件并想到“嘿,我们可以让他们表现得像 POCO ,因为他们只是 IEnumerable<T>
!“
这是 IObservable<T>
的诞生,是 IEnumerable<T>
的对偶(对于流“推送”信息到观察者,而不是观察者“拉出”项目
然后我厌倦了在“创世纪模式”中写作,那些真正聪明的人捆绑了形成LINQ
的相同的monadic查询逻辑以及ISchedulers
的“时间旅行”能力。 1}}并称之为“Rx”
答案 1 :(得分:2)
哦,小男孩!好的。我认为这里的主要问题是词汇。 Rx通常被描述为“事件”的Linq或类似的东西,并且用称为IObservable的东西实现。
我相信刚刚开始使用Rx的每个人都会因为同样的陷阱而陷入困境。当我们看到“事件”这个词时,我们会想到关键字事件/事件处理程序等等......但是在Rx的上下文中,事件比这更常见。它是异步发生的任何事情,很可能是在另一个线程上发生的。当然,一种类型的事件是.net事件,使用Observable.FromEventPattern工厂方法创建事件处理程序有一些价值 - &gt; IObservables,因为它们的生命周期被表示为IDisposable(稍后会详细介绍)。
Rx的另一种用法是数据并行性,因为它与TPL数据流严重重叠。我用于大数据并行工作的典型模式是将其转换为Rx IObservable,然后将处理/线程行为应用为monad。
对于花哨的部分,IObservable有一个Linq提供程序,它允许您使用Linq异步处理异步进程(例如Speculative execution using the TPL)。
最后IObservable是一个不幸的名字,因为它导致大多数人将它与INPC的想法混淆,因为它看起来类似于ObservableCollection。我保证不会。
答案 2 :(得分:0)
Reactive programming基于“数据流”和“传播变化”。
有多种表达方式。 Rx框架基本上是重新审视传统的基于事件的范例,作为事件的流表示,并围绕事件提供操作。