.NET 基金会项目介绍 - ReactiveUI

ReactiveUI 是属于 .Net 基金会的一个项目,本文将简要介绍该项目相关的信息。

中文介绍

中文介绍内容翻译自英文介绍,主要采用意译、如与原文存在出入,请以原文为准。

ReactiveUI

ReactiveUI 是一个可用于所有 .Net 平台的可组合的 MVVM 框架,它受启发于 “反应式编程”。“反应式编程” 是一种编程范式。通过它,您可以通过高可读性的方式和抽象的可变状态来表达您的产品特性,而这些不强关联与用户界面,因而提高应用程序的可测性。

本项目是非常流行的 ReactiveCocoa 框架的父级项目。

内部的维护者们也会争论 ReactiveUI 到底是不是一个框架,因为其项目核心是一系列对 Reactive Extensions 的扩展。

我们相信,尽管代码运行在计算机上,但代码就是人与人之间的沟通。如果您的代码为他人的阅读进行过优化,那么时间久了之后,您的项目将会更好。软件应该容易被他人阅读,这是非常重要的。我们相信 Reactive Extensions 的力量是让你能够以高可读性的方式来表达您的产品特性。

让我们举个例子。你现在有一个文本框。当用户输入一些内容时,你需要发送网络请求来获取输入关键词的搜索结果。你的设计师希望这个搜索操作是自动的,只要用户输入内容后就自动搜索。你的后端团队希望确保每次发起搜索时仅发送一次网络请求。在用户进行输入的时候每秒不要太高频的发送请求。

85a164dc3ab0fff636499166b41a54a5.png

通常会如何实现呢?

今天,大多数的现代编程是基于命令式的,这意味着其基于传统的 CPU 处理循环来建模。CPU 会执行一个指令,然后获取下一个指令,然后执行,依次循环。数十年来,开发者们都不得不在建模时形如 CPU 的运行范式,至少从 1980 年初期开始,就一直如此。

当我们寄希望于应用程序的行为是正确的,而这种正确性是依赖于开发者的正确性。此时,我们很容易发现,我们正处于一个棘手的窘境中。我们可以尝试使用单元测试或集成测试等办法来减低命令式编程的出错成本,但假如有更好的办法,那为什么还降低成本呢,毕竟成本已经不存在了?

没错,确实有更好的办法!

很久以前,当计算机编程刚刚出现的时候,计算机程序不得不完全采用手动的方式编写。如果技术员按照正确的顺序输入了正确的机器指令,那么程序的结果将会正确地符合业务场景。想要告诉计算机如何进行操作,这本身就是容易出错的,并且这非常依赖于无懈可击程序员。但直接将 “这个操作是什么” 告知的计算机,然后等待结果产出,无需关心计算机如何处理,岂不美哉?

ReactiveUI 受启发于函数反应式编程的编程范式,这种方式使得开发者可以将用户输入建模为一个随时间变化的函数。这简直太棒了,它使得您可以从用户界面上抽象模型状态,基于这种方式您便可以将产品概念表达为更加可读的方式,换言之,这也将提高程序的可测试性。

初见反应式编程可能会觉得可怕而复杂,不过,这有一个好办法,理解反应式编程的最好方式是借助一个电子表格:

fa7ab7445fe1802495bf7c79910934d0.png

  • 这里有三个单元格,A, B, 和 C

  • C 为 A 与 B 相加的和

  • 无论 A 和 B 如何变化, C 都会自动的更新自己的数值

这就是反应式编程:输入的改动会自动的在系统中传递。

项目详情

  • 官方网站

  • 项目源码

  • 项目许可证: MIT

  • NuGet

  • 项目联系人

相关链接

  • Slack 聊天室

  • Meetup 会议

  • 参与贡献

  • 开发文档

  • StackOverflow

笔者简评

可读性和可维护性是反应式编程带来的最为明显的好处。这点特别在业务代码上会有比较明确的体现。

理解的着重在于 “命令式” 和” 定义式” 的却别。就例如 SQL 是一种定义式的编程方式,其没有告诉计算机如何循环,只需要定义需要获取的内容即可。至于如何解析数据、命中索引、处理冲突这些都有数据库引擎自己处理。从可读性上考虑, SQL 的可读性较自己写命令循环更具备可读性。

同样地,“反应式” 也可以理解为是一种 “定义式” 的风格。

更加深入的内容,可以了解核心项目:Reactive Extensions for .NET

英文介绍

ReactiveUI

ReactiveUI is a composable, cross-platform model-view-viewmodel framework for all .NET platforms that is inspired by functional reactive programming which is a paradigm that allows you to express the idea around a feature in one readable place, abstract mutable state away from your user interfaces and improve improve the testability of your application.

It is the father of the extremely popular ReactiveCocoa framework. Internally the maintainers debate whether ReactiveUI is or is not a framework, as at its core the project is essentially a bunch of extension methods for the Reactive Extensions.

We believe that code is communication between people, that also happens to run on a computer. If you optimise for humans, then over a long time your project will end up better. Software should be understandable by other people; that is super important. We believe that only the power of the Reactive Extensions allows you to express the idea around a feature in one readable place.

Let’s say you have a text field, and whenever the user types something into it, you want to make a network request which searches for that query. Your designer has requested that this search query automatically execute as the user is typing but your operation team wants guarantees that only one network request is ever in transit and no more frequently than roughly once per second whilst the user is typing.

How would you usually implement this?

Most modern programming today is basically imperative, meaning it models the traditional fetch-execute cycle of a CPU. Perform an instruction, fetch the next one. Perform that one, and so on. For decades, programmers have had to mould their brains to fit the paradigm of the CPU. It’s been like this since the early 1980s.

When we rely on hoping that the behavior that emerges from a program is correct, and that reliance is based on nothing more than a programmer’s correctness, then we can easily find ourselves in a sticky situation. We can try and mitigate the costs of imperative programming with things like unit tests or integration tests, but why mitigate the costs when there’s a better way?

There is a better way

Long ago, when computer programming first came to be, machines had to be programmed quite manually. If the technician entered the correct sequence of machine codes in the correct order, then the resulting program behavior would satisfy the business requirements. Instead of telling a computer how to do its job, which error-prone and relies too heavily on the infallibility of the programmer, why don’t we just tell it what it’s job is and let it figure the rest out?

ReactiveUI is inspired by the paradigm of Functional Reactive Programming, which allows you to model user input as a function that changes over time. This is super cool because it allows you to abstract mutable state away from your user interfaces and express the idea around a feature in one readable place whilst improving application testability. Reactive programming can look scary and complex at first glance, but the best way to describe reactive programming is to think of a spreadsheet:9a028e7e5a3aed500cc9c20c65397a90.png

  • Three cells, A, B, and C.

  • C is defined as the sum of A and B.

  • Whenever A or B changes, C reacts to update itself.

That's reactive programming: changes propagate throughout a system automatically. Welcome to the peanut butter and jelly of programming paradigms.

Project Details

  • Website

  • Source

  • License: MIT

  • NuGet

  • Project Leads

Quicklinks

  • Slack

  • Meetup

  • Contribute

  • Documentation

  • StackOverflow

以上《英文介绍》摘录自 .NET Foundation 的项目介绍 。原文受原项目许可证保护。

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

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

相关文章

史上最强悍的一张图,没有任何一个中国人能躲得开!

▲ 点击查看几乎每个家庭都会有两张地图:一张世界地图,一张中国地图。薄薄的两张纸,蕴藏着让每个人学会“看世界”的磅礴力量。哈佛上一任校长,也是300多年来唯一一位女校长德鲁吉尔平福斯特(Drew Gilpin Faust&#x…

Dapr牵手.NET学习笔记:可观测性-分布式跟踪

分布式跟踪在dapr里是开箱即用的,不需要对应用作任何一丁点的侵入式编程。之前的开发,如果想实现分式跟踪,就得在应用中埋点,这是一个与业务无关系的动作。dpar通过sidecar可以轻松做到这点,从而让程序员更多精力投入到…

Android带三角形的弹窗,Android实现三角形气泡效果方式汇总

在开发过程中,我们可能会经常遇到这样的需求样式:这张图是截取京东消息通知的弹出框,我们可以看到右上方有个三角形的气泡效果,这只是其中一种,三角形的方向还可以是上、下、左、右。通过截图可以发现,气泡…

GDI+ 设置文本对齐方式

可通过以下语句来设置文本的对齐方式:StringFormat sF new StringFormat()sF.Alignment StringAlignment.Far; sF.LineAlignment StringAlignment.Far;代码:、View Code privatevoidForm1_Paint(objectsender, PaintEventArgs e) { …

微服务组件记事本:本地搭建Skywalking

最近一直在研究微服务,完全避免不了的是各种中间件的使用,打算把过程简要记录下来,过程很简单,也不会有原理和源代码级别的讲解,只是做下简单的知识备份。今天开始研究下链路追踪Skywalking,还记得之前在《…

马斯克发布脑机接口重大突破:蓝牙连接,一小时植入,已获FDA认证,人体实验在即...

全世界只有3.14 % 的人关注了爆炸吧知识综合整理自:机器之心、量子位、智东西编辑:知识君伊隆 马斯克神秘的脑机接口公司 Neuralink,终于向人们展示了自己首款可以「进入人体」的产品。今日,在 Neuralink 总部的发布会活动上&…

如何在android客户端中做到自动检查数据更新?,UpdateHelper

软件简介UpdateHelper 是一个为了简化Android App的迭代升级开发的AndroidLibrary,任何一个项目只要引入这个library便集成了在线检查新版本的功能以及下载APK功能,仅需两行代码即可搞定。UpdateHelpers要怎么使用?1.首先服务器端需要提供一个…

【另类见解】那些要保证缓存和数据库数据一致性的最后怎么了?

“现在如果说不出几句如何保证数据一致性方案的话,觉得出去面试都丢人,尤其是缓存和数据库的数据一致性“全程无图,请谨慎阅读缓存对于程序性能而言,无疑是个杀手锏,但不是完美的解决方案。关键在于缓存的物理位置和数据真实保存的…

3部世界顶级宇宙纪录片,献给对宇宙万物充满好奇的大人孩子~

全世界只有3.14 % 的人关注了爆炸吧知识宇宙深邃美丽,是黑夜的荧光,是夏天里冒着凉气的西瓜,总是诱人地勾起一代又一代人探索的欲望。对于宇宙思索与探索,人类的脚步从未停止。正是人类对宇宙的好奇,撑起了人类发展的大…

我的Java开发学习之旅------Base64的编码思想以及Java实现

Base64是一种用64个字符来表示任意二进制数据的方法。 用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据&#…

工业领域产品经理的尴尬处境

最近和一个1000人规模公司的智能制造部门进行交流,参会人员包括部门领导、技术人员、产品(经理)设计人员等,我介绍了工业信息建设相关理念、钢铁云及其他建设案例、iNeuOS工业互联网系统相关内容,交流期间他们领导说了…

你永远不知道女生裙子下面藏着什么

1 心不是这样比的。。2 这翻墙技巧满分3 盖了我的章你就是我的人了!4 论道具组可以穷到什么地步5 你永远不知道女生裙子下面藏着什么6 理发店的赶紧来领你的名片,设计好了!7 20190523,就是这样一个本质神奇的日子!图自…

分布式/微服务必配APM系统,SkyWalking让你不迷路

前言如今分布式、微服务盛行,面对拆分服务比较多的系统,如果线上出现异常,需要快速定位到异常服务节点,假如还用传统的方式排查肯定效率是极低的,因为服务之间的各种通信会让定位更加繁琐;所以就急需一个分…

JQuery Tree 树形结构插件 zTree

zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件兼容 IE、FireFox、Chrome 等浏览器在一个页面内可同时生成多个 Tree 实例支持 JSON 数据支持一次性静态生成 和 Ajax 异步加载 两种方式支持多种事件响应及反馈支持 Tree 的节点移动、编辑…

国外的幼儿数学竟然这样出题?来测测你的孩子都会做吗?

全世界只有3.14 % 的人关注了爆炸吧知识数学很重要,也必须要学!在家辅导孩子数学的家长可以在家给宝贝们换张有趣的DIY新试卷!孩子玩累了,拿出来做一做,无形中学习数学知识,事半功倍!填上对的数…

ProSolid下的遍历访问封装代码

在ProE二次开发中,时常需要遍历ProSolid下的面、点、轴等几何元素。我们知道,ProToolkit下的遍历函数还是有点小麻烦的,而ProWebLink中就简单很多,比如要遍历某ProSolid下的所有Group,代码如下: 1 var gro…

Floodlight 在 ChannelPipeline 图

我们知道,在Netty架构,一个ServerBootstrap用于生成server端的Channel的时候都须要提供一个ChannelPipelineFactory类型的參数,用于服务于建立连接的Channel,流水线处理来自某个client的请求。所以这里的 OpenflowPipelineFactory…

PS景观彩色平面图技巧

1、关于水系,园林学习网 PS景观彩色平面图 水要有阴影,不过是内投影。可以用图层特效来做,也可以用高斯模糊。 要有光感,可以用退晕,也可以用滤镜打光。 2、草地 草地在红线内外一定要区分开色象和明度饱和度&#xff…

牛顿如果穿越到现在,能看懂相对论和量子力学吗?

全世界只有3.14 % 的人关注了爆炸吧知识今天要讲给大家讲一个从朋友BOSS那里听来的故事,而故事的主人公就是赫赫有名的牛顿大神。话说那一天,BOSS在牛顿的苹果树下思考人生。突然牛顿就从苹果树下的棺材里爬了出来,棺材板怎么压都压不住。于是…

02Prism WPF 入门实战 - 建项

1.概要Prism介绍Github: https://github.com/PrismLibrary/Prism开发文档:https://prismlibrary.com/docs/Prism是一个框架,用于在WPF、Xamarin Forms、Uno Platform和WinUI中构建松散耦合、可维护和可测试的XAML应用程序。设计目标 为了实现下列目的&a…