观察者模式和反应式编程之间有什么区别?

问题描述 投票:41回答:2

最近我听到了很多关于反应式编程的术语。但是当我搜索它时,我发现的只是观察者模式的一些相似之处。实际上,我发现他们之间没有任何不同。它们之间的概念差异以及为什么反应式编程这个术语会被嗡嗡声?

observer-pattern reactive-programming
2个回答
40
投票

反应式编程是通过执行程序轻松传播数据流中的更改的一般范例。它不是一个特定的模式或实体本身,它是一个想法,或编程风格(如面向对象的prorgamming,函数编程等)。松散地说,这是当x在一个位置更改或更新,事物的概念取决于x的价值将在其他各个地方重新计算和更新,而不用大惊小怪。

传统上,你总是看到上面的模式,其中x是一个GUI事件,而这就是观察者模式的来源 - 它提供了一种通用的方法来提供“触发器”,以便在发生这样的更改时更新信息(或者,在更常见的OO术语中,当“事件”被触发时。)从这个意义上讲,它提供了一种简单的机制,允许在OO(有时是其他)样式语言中发生反应式编程的基本概念。

反应式编程的更全面概念在某种程度上扩展了传统的观察者模式 - 您可以创建和订阅此类事件的流,而不是仅仅针对单个事件(例如用户单击)触发特定操作,并设置基于运行的操作该流中发生的事件。


2
投票

我是反应式编程方面的专家,我正积极开发新的反应式编程工具。因果关系(https://github.com/erobwen/causality

一个简单的方法就是反应式编程不仅仅是使用观察者模式及其“回调”和“听众”。通过反应式编程,假设平台管理所有数据和UI依赖关系的自动化程度更高。因此,作为一般经验法则,如果使用观察者模式,则它不是反应系统。

判断编程范例是否具有反应性的另一种方法是编写更新数据结构和UI组件的代码,或者编写看起来好像只是首先创建UI组件的代码。因此:

非反应式编程:创建更新UI的UI +代码的代码。

反应式编程:创建UI的一段代码(也将用于更新)

例如,更新UI的非反应方式是让事件监听器听取按钮的单击,如果用户单击该按钮,则在DOM中找到适当的位置,您可以在其中设置属性,添加一个孩子,或添加一个类,以使事情发生。

要做同样的事情,reptivley是将按钮状态绑定到视图模式变量,然后将要修改的属性绑定到该视图模式变量。然后,当用户按下按钮时,系统将自动知道如何更新DOM。

反应式编程的现代和流行的例子是React和Angular。例如,使React反应的事情是,每个组件都声明其“render”函数来构建组件的UI。关键是这个渲染函数将在最初渲染组件时使用,但是当数据/ UI状态的更改将导致UI中的修改时也是如此。

© www.soinside.com 2019 - 2024. All rights reserved.