011.理解事件(events)和流(streams)

2024-05-15 03:44
文章标签 理解 事件 events 011 streams

本文主要是介绍011.理解事件(events)和流(streams),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在软件系统中,事件是一种用于指示发生了什么事情的消息。该事件可能代表一个技术事件——例如,在GUI应用程序中,您可能会在按下的每个键或每次鼠标移动上看到事件。该事件还可以表示业务发生,例如在金融系统中完成的货币交易。

事件由事件源引发,并由事件处理程序使用。正如您所看到的,事件是表示时变值的一种方式。在Rx中,事件源可以由可观察的表示,事件处理程序可以由观察者表示。但是,我们的应用程序正在使用的简单数据呢,比如数据库中的数据或从web服务器获取的数据。它在被动世界中有一席之地吗?

一、一切都是“流”
您编写的应用程序最终将处理某种数据,如图1.15所示。数据可以有两种类型:静止数据和运动数据。
在这里插入图片描述
图1.15运动数据和静止数据作为一个数据流。来自外部环境的连接点非常适合创建可观察性。这些可观测值可以很容易地与Rx合并,以创建合并的可观测值,内部模块可以在不知道数据元素的确切来源的情况下订阅该可观测值。

静态数据以数字格式存储,通常从数据库或文件等持久存储中读取。运动中的数据在网络(或其他介质)上移动,并被推送到您的应用程序或由您的应用从任何外部源提取。

无论您在应用程序中使用何种类型的数据,都应该明白,一切都可以作为流来观察,甚至是静止的数据和对应用程序来说看起来静态的数据。例如,配置数据被认为是静态的,但即使在某个时刻,配置也会发生变化,无论是在长时间还是短时间之后。从应用程序的角度来看,这并不重要;你想被动应对,并在这些变化发生时处理它们。当您将静止的数据视为另一个数据流时,可以更容易地组合这两种类型的数据。对于您的应用程序来说,数据来自何处并不重要。

例如,应用程序启动通常从其持久存储加载数据以恢复其状态(应用程序关闭前保存的状态)。当然,在应用程序运行过程中,这种状态可能会发生变化。应用程序的内部关心状态的部分可以查看承载它的数据流。当应用程序启动时,流将传递加载的数据,当状态发生变化时,流会承载更新。

我喜欢用一个很好的比喻来解释流,那就是水管,但这个水管有数据包穿过它,就像你在图1.16中看到的那样。当使用水管时,你可以用它做很多事情。你可以在末端安装过滤器。可以添加不同的软管头,以提供不同的功能。您可以添加压力监测器来帮助调节流量。您可以对数据流执行同样的操作。你会想要建立一个管道,让信息在其中流动,最终给出适合你逻辑的最终结果;这包括过滤、转换、分组、合并等等。

数据流和事件流非常适合Rx可观察性。使用IObservable对它们进行抽象使您能够合成运算符并创建复杂的执行管道。这与您对Shoppy示例所做的类似,在Shoppy示例中,对服务器的调用作为更复杂的执行管道的一部分获得了折扣,该管道还使用了过滤(在连接上)并最终刷新了视图(就像洒水喷头泼水一样)。

在这里插入图片描述
图1.16数据流就像一根软管:每一滴水都是一个数据包,需要经过各个站点,直到到达终点。您的数据还需要进行过滤和转换,直到它到达真正的处理程序,并对其进行有用的处理。

——未完待续

译者:重庆教主(QQ23611316) 2024.05.14

网站:WPF中文网 wpfsoft.com

这篇关于011.理解事件(events)和流(streams)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/990713

相关文章

回调的简单理解

之前一直不太明白回调的用法,现在简单的理解下 就按这张slidingmenu来说,主界面为Activity界面,而旁边的菜单为fragment界面。1.现在通过主界面的slidingmenu按钮来点开旁边的菜单功能并且选中”区县“选项(到这里就可以理解为A类调用B类里面的c方法)。2.通过触发“区县”的选项使得主界面跳转到“区县”相关的新闻列表界面中(到这里就可以理解为B类调用A类中的d方法

vue+elementui分页输入框回车与页面中@keyup.enter事件冲突解决

解决这个问题的思路只要判断事件源是哪个就好。el分页的回车触发事件是在按下时,抬起并不会再触发。而keyup.enter事件是在抬起时触发。 so,找不到分页的回车事件那就拿keyup.enter事件搞事情。只要判断这个抬起事件的$event中的锚点样式判断不等于分页特有的样式就可以了 @keyup.enter="allKeyup($event)" //页面上的//js中allKeyup(e

如何理解redis是单线程的

写在文章开头 在面试时我们经常会问到这样一道题 你刚刚说redis是单线程的,那你能不能告诉我它是如何基于单个线程完成指令接收与连接接入的? 这时候我们经常会得到沉默,所以对于这道题,笔者会直接通过3.0.0源码分析的角度来剖析一下redis单线程的设计与实现。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是开源

MySQL理解-下载-安装

MySQL理解: mysql:是一种关系型数据库管理系统。 下载: 进入官网MySQLhttps://www.mysql.com/  找到download 滑动到最下方:有一个开源社区版的链接地址: 然后就下载完成了 安装: 双击: 一直next 一直next这一步: 一直next到这里: 等待加载完成: 一直下一步到这里

PyTorch模型_trace实战:深入理解与应用

pytorch使用trace模型 1、使用trace生成torchscript模型2、使用trace的模型预测 1、使用trace生成torchscript模型 def save_trace(model, input, save_path):traced_script_model = torch.jit.trace(model, input)<

通知中心设置一个键盘的捕捉事件

//通知中心监听键盘的frame发生改变

XMG 触摸事件的处理过程

1.自己本身并不处理,顺着响应者链条向上传递,将事件交给响应者进行处理 2.touches默认做法:把事件传递到上一个响应者 3. super是父类不是父控件

isa指针的理解

D3实例isa指向D3类对象。D3类的话isa指向D3元类对象。D3元类保存类中的方法调度列表,包括类方法和对象方法

WeakHashMap深入理解

这一章,我们对WeakHashMap进行学习。 我们先对WeakHashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用WeakHashMap。 第1部分 WeakHashMap介绍 第2部分 WeakHashMap数据结构 第3部分 WeakHashMap源码解析(基于JDK1.6.0_45) 第4部分 WeakHashMap遍历方式 第5部分 WeakHashMap示例

netty中常用概念的理解

目录   目录ChannelHandler ChannelHandler功能介绍通过ChannelHandlerAdapter自定义拦截器ChannelHandlerContext接口ChannelPipeline ChannelPipeline介绍ChannelPipeline工作原理ChannelHandler的执行顺序   在《Netty权威指南》(第二版)中,ChannelP