002.反应式编程的必要性

在实际应用程序中,您可以在许多情况下发现可能的时变变量—例如,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.hqwc.cn/news/697202.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv8小白中的小白安装环境教程!没一个字废话,看一遍不踩坑!

文章目录 去哪里下代码?怎么下代码?怎么装环境?命令行界面(CLI)指令和Python脚本区别?附录1 conda常用指令附录2 git常用指令附录3 项目代码文件作用去哪里下代码? 下载代码请大家直接去 YOLOv8的官方仓库下载,名字叫 ultralytics,有些镜像网站和个人发的等来历不明的代…

使用LangChain和Neo4j快速创建RAG应用

大家好,Neo4j 通过集成原生的向量搜索功能,增强了其对检索增强生成(RAG)应用的支持,这标志着一个重要的里程碑。这项新功能通过向量索引搜索处理非结构化文本,增强了 Neo4j 在存储和分析结构化数据方面的现…

基于SSM的“基于协同过滤的在线通用旅游平台网站”的设计与实现(源码+数据库+文档)

基于SSM的“基于协同过滤的在线通用旅游平台网站”的设计与实现(源码数据库文档) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统主界面 景点信息界面 后台界面 部分源码…

具身智能论文(一)

目录 1. PoSE: Suppressing Perceptual Noise in Embodied Agents for Enhanced Semantic Navigation2. Embodied Intelligence: Bionic Robot Controller Integrating Environment Perception, Autonomous Planning, and Motion Control3. Can an Embodied Agent Find Your “…

【cpp】并发多线程 Unique

1. unique_lock 何时锁定资源。 unique_lock lock1 时候&#xff0c;还没有锁住资源。 实际是后面&#xff0c;显式的出发&#xff1a; 比如&#xff0c; lock.lock, 或 std::lock(lk1,lk2), 或者条件变量CV.wait(mtx, []{!re})。 #include <iostream> #include <mu…

Redis-详解(基础)

文章目录 什么是Redis&#xff1f;用Redis的特点&#xff1f;用Redis可以实现哪些功能&#xff1f;Redis的常用数据类型有哪些?Redis的常用框架有哪些?本篇小结 更多相关内容可查看 什么是Redis&#xff1f; Redis&#xff08;Remote DictionaryServer&#xff09;是一个开源…

服务器端口怎么开,服务器端口的开放通常涉及的五个关键步骤

服务器端口的开放通常涉及五个关键步骤&#xff0c;包括修改防火墙规则、配置服务器软件以及验证端口是否开放。下面将详细介绍每个步骤。 一、您需要确定需要开放的端口。常见的服务器应用程序端口包括HTTP&#xff08;80端口&#xff09;、HTTPS&#xff08;443端口&#xff…

苍穹外卖Day06笔记(复习了jwt的加密解密和传递)

疯玩了一个月&#xff0c;效率好低&#xff0c;今天开始捡起来苍穹外卖~ 1. 为什么不需要单独引入HttpClient的dependency&#xff1f; 因为我们在sky-common的pom.xml中已经引入了aliyun-sdk-oss的依赖&#xff0c;而这个依赖低层就引入了httpclinet的依赖&#xff0c;根据依…

【SAP-PP】记录COGI的删除记录

业务需求&#xff1a;记录COGI的被删除记录 业务背景知识&#xff1a; 1.COGI正常记录PP自动货物移动中错误的记录&#xff1b; 2.本意是如果出现了错误&#xff0c;能够让用户能手动处理一下货物移动&#xff0c;保证账务和库存的争取&#xff1b; 3.在一些特殊情况下&#xf…

opencv车道偏离系统-代码+原理-人工智能-自动驾驶

车道偏离预警系统&#xff08;Lane Departure Warning System, LDWS&#xff09;是一种主动安全技术&#xff0c;旨在帮助驾驶员避免因无意中偏离车道而引发的事故。从原理到实战应用&#xff0c;其工作流程大致如下&#xff1a; 传感器采集 &#xff1a;系统通常配备有一个或…

【UE5 C++】基础学习笔记——01 UObject的创建与使用

目录 步骤 一、创建UObject 二、创建基于UObject的蓝图类 三、在UObject中使用变量和函数 步骤 一、创建UObject 在内容浏览器中新建一个C类 父类选择“Object” 类的类型设置为公有&#xff0c;这里就命名为“MyObject”&#xff0c;点击“创建类”来创建头文件和源文…

VMware 不能拍摄快照

问题&#xff1a; 拍摄快照后&#xff0c;会出现这个弹窗&#xff0c;然后虚拟机就直接自动退出了&#xff0c;还会弹出一个框&#xff1a; 解决方法&#xff1a; 我用的是 window11 和 VMware16.0.0 这是因为VM16与window11&#xff0c;二者之间版本不兼容问题&#xff0c;可…