月薪两万程序员应该知道的编程模型

我承认这篇文章有标题党的嫌疑,看完这篇文章并不会让你月薪两万 。如果想月薪两万甚至更多,并不是靠一篇文章,一本书,一个项目来实现的 。
但是一个合格的程序员对响应式编程多少都应该有些了解,甚至有个清楚的认识 。
希望这篇文章能够让你对响应式编程有个基本的认识,以及响应式编程会带来哪些好处,解决哪些问题,或者说为什么响应式编程如此重要 。
响应式编程发展过程响应式编程的概念是微软最开始提出并且在.net平台上实现的一个库 。后来这个模型被大家接受并认可,ReactiveX 就实现了很多其它语言对应的库,大名鼎鼎的RXJAVA就是针对Java语言实现的 。
后来ReactiveX 和 Reactor共同制定了Reactive Stream标准,ReactiveX和Reactor都是在这个标准下实现的框架 。Spring5 正式引入Reactor 并基于该框架实现了WEB-FLUX 。
此外Java8引进了Stream流以及lamada表达式,Java9引入了Flow,也是对响应式编程的一种支持 。
什么是响应式编程

reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change
这是维基百科对响应式编程给出的定义 。我对这个定义的评价是,懂得自然懂,不懂的还是不懂 。
我提炼一下这个定义的关键词 声明式,数据流, 传递变化(响应),我自己再给加一个异步,因为实际上生产级别代码都是进行异步响应的,几乎很少进行同步响应 。
在具体介绍响应式编程之前,先简单解释一下这几个关键词的含义 。
声明式编程声明式和指令式对应 。指令式大家比较熟悉,就是依次写出完成某个任务的每条指令 。
比如从一个苹果列表里,找出所有红色的苹果,指令式编程是这样做的 。
List<Apple> apples = new ArrayList<Apple>();for (Apple apple : apples){if (apple.getColor() == "red"){System.out.println(apple);}}声明式编程,只要写出你想要什么就OK了 。
典型的声明式语言的就是sql,对应上面的找红色苹果的需求,应该是这样的 select * from apple where color = red 。
简单的讲,声明式编程就是聊天式编程,和计算机说你想要什么就OK了 。
数据流再说说数据流,其实数据流可以把它想象成水流,里面流淌的是数据,事件,信号等内容 。如果大家对Java8引入的Stream流有一定了解的话,就会好理解 。如果不了解的可以通过我这篇文章做个入门 。
传递变化(响应)传递变化(响应),其实就是对响应二字的体现 。所谓的响应就是你和某个人打了招呼,然后某人回应你了 。某人对你的回应就是响应 。
将上面的场景对应到面向对象的编程里面,就是观察者(订阅)模式 。观察者对被观察者的某些行为做出对应的动作 。
有些前端程序员对观察者模式可能比较陌生,那么大家比较熟悉的Ajax回调函数也是响应式编程的一种体现,比如如下JS代码
$.ajax("example.action").done(function(){console.log("success")}).fail(function(){console.log("error")}).always(function(){console.log("complete")});这就是典型的异步回调,当请求成功的时候会有一种响应动作,请求失败的时候会有另一种响应动作 。
异步关于响应的方式,有同步响应和异步响应 。实际应用中大部分都会采用异步响应 。
同步:你给旅行社打电话预定一张机票,接线员接到你的电话后,开始查询航班信息,然后进行预订,这期间你一直拿着电话等他的结果 。
异步:你给旅行社打电话预定一张机票,接线员接到电话后,记录下你要预定的航班信息,然后就挂掉电话 。等他预定好之后,把预定结果打电话告诉你 。这就是异步 。
很明显异步操作对你来说效率更高,因为你不用一直等接线员的操作,你可以干其他事情 。
上面的场景也被很多人称为好莱坞规则 。很多好演员去好莱坞报名拍戏,经纪公司会登记下演员的姓名,等有合适的机会的时候,经纪公司会给演员打电话,而不用演员一直在现场等,或者不断的给经纪公司打电话询问 。 don't call me I will call you 。
小试牛刀其实介绍完上面那些东西,可能对响应式编程的理解还是模糊的 。那么我们就以Reactor框架为例子做一个简单的说明 。毕竟程序员都喜欢show me the code 。
上面提到了响应式编程的核心是基于观察者(订阅)模式的 。观察者观察被观察者的行为,根据不同的行为做出不同的响应行为 。


推荐阅读