002.反应式编程的必要性

news2024/11/23 21:52:13

在实际应用程序中,您可以在许多情况下发现可能的时变变量—例如,GPS位置、温度、鼠标坐标,甚至文本框的内容。所有这些都有一个随时间变化的值应用程序会发生反应,因此是时变的。还有一点值得一提时间本身就是一个时变;它的值一直在变化。在c#这样的命令式编程模型中,您将使用事件来创建响应机制更改,但这可能导致难以维护的代码,因为事件是分散的在各种代码片段之间。

想象一下,一个移动应用程序可以帮助用户在商店中找到折扣和特价商品位于他们的周边地区。我们就叫它Shoppy吧。图1.2描述了Shoppy体系结构。

在这里插入图片描述
图1.2 Shoppy应用程序架构。手机应用程序接收电流并可以通过应用程序服务查询商店和交易。
当有新的交易可用时,应用程序服务将发送推送通知推送通知服务器。

你想从Shoppy中获得的一个重要功能是设置商店图标的大小用户越靠近(从某个最小半径开始),地图上的距离越大,如图图1.3。您还希望系统在更新时将新交易推送到应用程序是可用的。
在这里插入图片描述
图1.3 Shoppy应用程序地图视图。当用户远时从Rx商店,图标是小的(上)左边),当用户靠近时,
图标变大了(在右边)。

在这个场景中,您可以说store.Location、myLocation和iconSize变量是时变的。对于每个商店,图标大小可以写成:

distance = store.Location – myLocation;
iconSize = (MINIMAL_RADIUS / distance)*MinIconSize

因为您使用了时变变量,所以每次在myLocation变量,则在距离变量中触发更改。应用程序最终会根据距离商店的远近做出反应,使商店图标显得更大或更小。注意,为简单起见,我没有处理边界检查允许的最小图标大小,该距离可能为0或差不多了。

这是一个简单的例子,但正如您将看到的,使用反应的强大功能编程模型在于其组合和连接以及划分和连接的能力拆分每个时变变量所推入的值流。这是因为响应式编程让你专注于你想要实现的东西,而不是你自己让它工作的技术细节。这导致了简单易读的代码和消除了大多数的样板代码(如变更跟踪或状态管理)使您偏离代码逻辑的意图。当代码短小精悍时,它的bug更少,更容易掌握。

我们现在可以停止讨论理论上的内容了,这样你就可以看到如何在.NET中借助Rx将响应式编程付诸实践。

——未完待续

译者:重庆教主 20240513

网站:WPF中文网 wpfsoft.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1673205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python爬虫(五)之新出行汽车爬虫

python爬虫(五)之新出行汽车爬虫 接完最后一单,终于肝完了最后一个python爬虫——新出行爬虫,将https://www.xchuxing.com网站上所有的汽车爬虫全部抓取下来。 import requests import json import csv from lxml import etree …

Secnet-智能路由系统 actpt_5g.data 信息泄露漏洞复现

0x01 产品简介 Secnet安网智能AC管理系统是广州安网通信技术有限公司(简称“安网通信”)的无线AP管理系统。 0x02 漏洞概述 Secnet-智能路由系统 actpt_5g.data 接口存在信息泄露漏洞,未经身份验证的远程攻击者可以利用此漏洞获取系统账户…

AI模型部署实战:利用OpenCV的CUDA模块加速视觉模型部署流程

本文首发于公众号【DeepDriving】,欢迎关注。 一. 前言 我在之前的文章《AI模型部署实战:利用CV-CUDA加速视觉模型部署流程》中介绍了如何使用CV-CUDA库来加速视觉模型部署的流程,但是CV-CUDA对系统版本和CUDA版本的要求比较高,在…

政安晨:【Keras机器学习示例演绎】(四十五)—— 使用变换器进行命名实体识别

目录 简介 安装 HuggingFace 的开源数据集库 将 NER 模型类构建为 keras.Model 子类 从数据集库加载 CoNLL 2003 数据集并进行处理 制作 NER 标签查找表 编译和拟合模型 指标计算 结论 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏…

PyTorch进行CIFAR-10图像分类

本节将通过一个实战案例来详细介绍如何使用PyTorch进行深度学习模型的开发。我们将使用CIFAR-10图像数据集来训练一个卷积神经网络。 神经网络训练的一般步骤如图5-3所示。 (1)加载数据集,并做预处理。 (2)预处理后的…

使用PageHelper分页插件,发现获取到的total总记录数量不对,无法获取到正确的total数量

目录 1.1、错误描述 1.2、解决方案 1.1、错误描述 周一在工作中,写了一个列表分页的接口,其中使用的是PageHelper分页依赖,原本想着挺简单的,也就是使用PageHelper.startPage(pageNum, pageSize);方法就可以了,代码…

讨论:WGS84与CGCS2000的坐标系怎么互转

前言: 今天我们要讨论一个问题:WGS84与CGCS2000的坐标系怎么互转? 对于有一定基础的朋友应该知道,WGS84和CGCS2000属于不同的椭球,如果进行严密的数学转换,是需要建立参数模型之后,再进行转换&…

视频素材哪里找?7个无版权视频素材网站

这篇文章为那些正在学习视频剪辑的新手提供了一份宝贵的资源清单,介绍了7个可以找到高质量且免费可商用的视频素材网站。每个网站都有其独特的资源库,可以帮助用户找到适合各种项目的视频素材,从生活vlog到专业旅行记录,都可以在这…

STM32存储左右互搏 USB接口FATS文件读写U盘

STM32存储左右互搏 USB接口FATS文件读写U盘 STM32的USB接口可以例化为Host主机从而对U盘进行操作。SD卡/MicroSD/TF卡也可以通过读卡器转换成U盘使用。这里介绍STM32CUBEIDE开发平台HAL库实现U盘FATS文件访问的例程。 USB接口介绍 常见的USB接口电路部分相似而有不同的连接器…

数据分离和混淆矩阵的学习

1.明确意义 通过训练集建立模型的意义是对新的数据进行准确的预测(测试集的准度高才代表good fit); 2.评估流程 3.单单利用准确率accuracy进行模型评估的局限性 模型一:一共1000个数据(分别为900个1和100个0&#x…

网站服务器备案及域名购买配置教程

一、阿里云服务备案准备工作 1.什么是备案? 备案是指向相关部门提交网站信息,以便监管和管理互联网信息服务,未经备案的网站可能面临罚款甚至被关闭的风险。备案主要看您的网站或App等互联网信息服务解析到的服务器是否在中国内地(大陆),如果服务器在中国内地(大陆),…

Postman基础功能-Collection集合和批量运行

一、Collection(集合)介绍 当我们对一个或多个系统中的很多接口用例进行维护时,首先想到的就是对接口用例进行分类管理,同时还希望对这批接口用例做回归测试。 在 Postman 中也提供了这样一个功能,就是 Collec…

Aim Web API 远程代码执行

摘要 漏洞类型:远程代码执行(RCE)产品:目标版本:> 3.0.0(afaik)受影响的端点: /api/runs/search/run/严重性:临界 描述 在aim项目中发现了一个关键的远程代码执行漏…

设计模式 六大原则之里氏替换原则

文章目录 概念替换逻辑行为不变 拆解小结 概念 子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏。 替换 替换的前提是面向对象语言所支持的多态特性,同一个行为具有多个不同表现形式或形态的能力。 逻…

js基础-数组-事件对象-日期-本地存储

一、大纲 一、获取元素位置 在JavaScript中,获取一个元素在页面上的位置可以通过多种方法实现。以下是一些常见的方法: getBoundingClientRect() getBoundingClientRect() 方法返回元素的大小及其相对于视口的位置。它提供了元素的left、top、right和bo…

Tkinter组件:Text-显示和处理多行文本

Tkinter组件:Text Text(文本)组件用于显示和处理多行文本。在 Tkinter 的所有组件中,Text 组件显得异常强大和灵活,适用于多种任务。虽然该组件的主要目的是显示多行文本,但它常常也被用于作为简单的文本编…

【单片机调试】mcu调试bug记录

【单片机调试】mcu调试bug记录 2023.5-2023.11待输入 2023.12-2023.22024.3-至今1.spi通信问题 2023.5-2023.11 待输入 2023.12-2023.2 辞职阶段:【STM32调试】寄存器调试不良问题记录持续版 2024.3-至今 1.spi通信问题 现象说明: mcu与afe芯片为spi通…

为什么使用AI 在游戏中不犯法

使用AI在游戏中本身并不违法,甚至在很多情况下,游戏公司自己也会在游戏中集成AI来提高游戏体验,例如通过AI驱动的非玩家角色(NPC)来增加游戏的互动性和挑战性。然而,使用AI是否违法取决于AI的使用方式和目的…

设计一个游戏的基本博弈框架

设计一个游戏的基本博弈框架,玩家通过操作改变某个数值,这个数值的变动会引发一系列实时变化,并且当这些数值累计到特定阈值时,会导致游戏中出现其他变化,可以分为以下几个步骤: 1. 确定游戏类型和主题 首…

邮件地址采集软件有哪些-邮箱地址采集软件

邮件地址采集软件是帮助用户收集、管理和使用邮件地址的工具,它们在商业营销、市场调研、网络爬虫等领域有着广泛的应用。以下是一些常见的邮件地址采集软件: 易邮件地址搜索大师:易邮件地址搜索大师是一款搜索邮件地址和手机号码的软件&…