响应式编程理解
响应式编程是为了解决异步的问题,异步的问题是指因为回调导致的代码难以维护的问题,一般在非常多异步的项目中 这种问题会恶化
我们来思考一下异步的产生,异步是因为一个对象与另外一个对象交互,因为需要等待,所以增加回调函数处理等待结果,所以我们可以想象一下 假如一个系统中有10个对象,然后这些对象之间都会互相交互,而且还存在顺序的问题,当然最终代码肯定是可以写出来的,不过很难以维护,这不仅是回调的问题,加入a对象与b对象交互,那么我们把a对象和b对象用线连起来,表示他们之间的一段业务联系,如果存在a b c d e f g7个对象,然后他们之间互相都有线连起来,分别表示不同的业务线,这些业务线构成了整个业务逻辑,是非常混乱的,看 即使我们有面向对象,把代码进行了解耦,但是业务是有联系的,代码虽然分开了,但是业务依然混乱,当几天后,我们不得不在每个对象之间的连线上 寻找相互之间的关系,这是非常痛苦的。
所以,响应式编程主要是解决这个问题的,我用一个例子来生动的描述响应式编程,假如有一天 我们想要构建一个世界,这个世界里面 狗 猫 老鼠 人等对象,然后这个时候老板给了第一个需求 猫捉老鼠跑,那我们肯定开始写程序了,猫发送一个消息给老鼠,老鼠接到消息后,用行动回应了猫,猫接到的反馈是 老鼠跑了,那猫下一步的动作就是追,我们可以看到 这两个对象相互之间进行了消息传递,同样 我们的代码中 也充斥着 刚才的请求响应体,但是如果我们不这样设计呢?我们换一个思路:猫可以发出事件,同样猫可以响应事件,老鼠可以发出事件,老鼠可以响应事件,老鼠逃跑的原因不一定是猫发出了怒吼,而是因为老鼠订阅了猫的怒吼,换句话说,猫向天上怒吼一声,当然 猫怒吼的意图我们并不清楚,猫也不清楚,他仅仅是怒吼一声,这是他发出的事件,那么因为老鼠之前订阅了这个事件,那么老鼠会收到推送,于是老鼠采取自己的行为,就是跑,老鼠本身跑这个行为也是发出了一个事件,当然 老鼠没有向任何人发起请求,他仅仅是广播了一个事件,就是跑,因为很久以前 猫就订阅了老鼠跑的事件,于是猫在收到订阅后 就采取了行动,刚才我的描述中,我们会发现 每个对象都不关心其他对象,他们仅仅是响应事件,发出事件,但是我们的程序依然可以运行,而且用来描述业务逻辑之间的连线没有了,取而代之的是一个个完全的独立的互不依赖的对象,我们把其中这个对象从程序中拿出来 程序并不会崩溃,
这就是响应式编程。
而发出事件总是容易的,响应事件却不那麽简单,因为如何响应事件定义了这个对象区别于其他对象的特征,随着世界越来越复杂,人类总结出了很多规律,而这些规律就是对于一系列响应的出现顺序和强度的总结,比如,人类认为,鸡上树 狗跳墙,则地震来,所以 这里面 人类认为 只有上述两个事件同时发生,人类才会采取相应的行动,在程序里面 就是,一个对象可以订阅一个非常复杂的事件组合,只有这个非常复杂的事件组合发生了,那个对象才会采取动作,这本质上就是 如何更合的管理 事件监听,包括整个异步流的处理,这就是exjs做的事情。
原文地址:https://www.cnblogs.com/mrzhu/p/12443157.html