近年来,响应式编程范式越来越受欢迎,作为一个模型,旨在简化事件驱动应用程序的实现和异步代码的执行。响应式编程专注于更改的传播及其影响——简单地说,就是如何对更改做出反应更改并创建依赖于它们的数据流。
随着Facebook和Twitter等应用程序的兴起,在大洋的另一边发生的每一个变化(例如,状态更新)都是立即发生的在另一边观察,一连串的反应立即在里面发生应用程序。用一个简化的模型来表达这一点并不奇怪需要反应链。今天,现代应用程序受到变化的高度驱动发生在外界环境(如GPS定位,电池和电源)管理和社交网络消息)以及应用程序内部的更改(例如web调用响应、文件读写和计时器)。致所有人对于这些事件,应用程序会做出相应的反应——例如,通过更改显示视图或修改存储数据。
我们看到有必要用一个简化的模型来对许多类型的事件作出反应应用领域:机器人、移动应用、医疗保健等。以经典的命令式方式对事件做出反应会导致代码繁琐、难以理解、容易出错,因为负责协调事件和数据的可怜的程序员更改必须手动处理可以更改相同内容的代码孤岛数据。这些变化可能以不可预测的顺序发生,甚至可能同时发生。响应式编程提供了对事件和变化状态的抽象这样,当我们创建事件发生时运行的执行链时,我们就可以从管理这些值之间的依赖关系中解脱出来。
响应式扩展(Reactive Extensions, Rx)是一个提供响应式编程模型的库用于。net应用程序。Rx使事件处理代码更简单,表达能力更强使用声明式操作(LINQ风格)在单个序列上创建查询事件。Rx还提供了称为组合子(组合操作)的方法使您能够连接事件序列,以便处理事件发生的模式链接或它们之间的相关性。在写这篇文章的时候,超过600操作(带重载)在Rx库中。每一个都封装了循环事件处理代码,否则您必须自己编写。
这本书的目的是教你为什么应该接受响应式编程的思维方式,以及如何使用Rx轻松构建事件驱动的应用程序最重要的是,有趣。这本书将一步一步地教你建立在Rx的各个层上,从允许您创建响应式的构建块开始数据和事件流,通过Rx提供的丰富查询功能,以及Rx并发模型,允许您控制代码的异步性和
响应式处理程序的处理。但首先你得明白是什么响应式编程的含义,以及传统命令式编程与处理事件的响应式方式。
当应用程序发生变化时,你的代码需要对它们做出反应;这就是反应意味着。变化有多种形式。最简单的一个是变化的变量值,我们在日常编程中已经很习惯了。该变量保存一个值,该值可以在特定时间通过特定操作进行更改。为例如,在c#中你可以这样写:
int a = 2;
int b = 3;
int c = a + b;
Console.WriteLine("before: the value of c is {0}",c);
a=7;
b=2;
Console.WriteLine("after: the value of c is {0}",c);
输出:
before: the value of c is 5
after: the value of c is 5
在这个小程序中,两个输出都显示了c变量的相同值。在我们的命令式编程模型,c的值是5,除非您显式覆盖它,否则它将保持5。有时你想让c在a或b变化的时候更新。响应式编程引入了一种不同类型的随时间变化的变量:这个变量不是固定于其分配的值,而是随着时间的推移对发生的变化做出反应而变化。再看看我们的小程序;当它在响应式编程中运行时模型,输出为:
before: the value of c is 5
after: the value of c is 9
c的值神奇地改变了。这是由于发生在它的变化依赖关系。这个过程的工作原理就像一台机器,从两个平行的传送带输入,从两边的输入产生一种产品,如图1.1所示。
变量c始终依赖于a和b的值,当a=2,b=3,则c=5,当a=7,b=2,则c=9。
您可能会感到惊讶,但您可能已经使用过响应式应用程序年。正是这种反应性的概念造就了你最喜欢的电子表格应用程序如此简单和有趣的使用。当你在电子表格单元格中创建这种类型的方程时,每次更改输入方程的单元格中的值时,结果将在最终单元格会自动更改。
——未完待续
译者:重庆教主 20240513
网站:WPF中文网 wpfsoft.com