.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,一经查实,立即删除!

相关文章

NPOI 删除指定的行

http://jiajietieren.blog.163.com/blog/static/60186942201261673517542/转载于:https://www.cnblogs.com/ajie1212/archive/2012/07/16/2594125.html

最具体的历史centos下一个 postfix + extmail + dovecot + maildrop 安装注意事项2014更新...

这篇文章原本是2008年发表的,近期几天照此笔记又安装了一遍系统。这里更新一下记录。作者:wangdy本文发表于 http://blog.csdn.net/aryang/article/details/40593283 转载请注明!1. 概述 安装环境是CentOS6.5,拿到server的时候仅…

android 只能输入汉字,EditText限制输入的几种方式及只显示中文汉字的做法

前段时间项目中有个需求是要求只能输入汉字,并且不能输入偏旁部首,于是总结了下EditText限制输入的几种方式,但是对于语音输入的还没找到好的解决方案:通过设置EditText的inputType来限制,可以在xml或者java代码中设置…

plsql导出表结构到excel_plsql怎么导出表格!如何用plsql从oracle中导入导出数据

如何将plsql内多个窗口查询结果同时导出到excel内在PL/SQL工具中执行得到的可以导出放在同一个EXCEL的多个Sheet页签的,操骤为:选中其中一个结果集中数据→右键→复制到Excel→作为xls复制所有(or作为xlsx复制所有)→完成。操作截图:Excel展示…

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

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

解决vista/win7安装windows live messenger 2011找不到wlidcli.dll及错误800488eb .

问题一:找不到文件wlidcli.dll。 这个问题可能是由于修改了默认的Common Files 文件夹所在磁盘造成的。默认的位置是“C:/Program Files (x86)/Common Files/microsoft shared/Windows Live”,比如被改到了“D:/Program Files (x86)/Common Files/micros…

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

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

mysql cookbook 1

show databases; use [database]; show tabels;GRANT ALL ON database.* TO user localhost IDENTIFIED BY password;>mysql -h localhost -p -u user;转载于:https://www.cnblogs.com/chhyong88/archive/2012/07/22/2603592.html

新人入职培训有关职场沟通的总结分享

沟通 不要越级沟通言必成三,超过3点记不住的。kiss原则,keep it simple and stupid说事实观点先说结论与重点,再说细节支撑结论:mece原则,穷尽且不交叉提问最好不要问是或否的问题,而是开放性问题。 是或否…

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

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

ecno是什么的缩写_美国的英文缩写是什么简写

利坚合众国简称美国,它的英文也是有简写的,就算我们不知道它的全称其缩写也不会忘记。以下是学习啦小编给大家带来美国的英文缩写,以供参阅。美国的英文简写美国的英文缩写:the United States of America (U.S.A.)美国的英文缩写&…

GDI+ 设置文本对齐方式

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

那些视觉上骗了你的东西,你上当了吗?

全世界只有3.14 % 的人关注了爆炸吧知识世界上最离谱的错觉图,看完我瞎了还能不能好好的玩耍了啊!1

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

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

linux nodejs 采集器,Linux记录-jstack采集namenode gc信息

#!/bin/bash#以hdfs用户执行jstack每分钟采集一次namenode gc日志#mkdir -p /tmp/jstackcd /log/hadoop/jstack_nnpid$(jps | grep -i "namenode" | awk NR1{print $1})dir/log/hadoop/jstack_nn/jstack_nn_date "%Y-%m-%d-%H"if [ ! -d ${dir} ]thenmkdir…

1.1-1.5-vim编辑器

vim是vi的升级版共有3种工作模式:1一般模式 2编辑模式 3命令模式a在光标后插入 i在光标前插入 o在光标下插入新行A在光标行末插入 I在光标行首插入 O在光标上插入新行$光标移动到行尾 0光标移动到行首gg光标到第一行 G光标到最后一行…

UI设计师应了解最终用户的十件事

Ubuntu Unity 刚度过了它的首个周年纪念日,Windows 8也即将发布,这一切都在清晰地说明所有的用户界面并非平等。事实上,创造一个可以改变计算机使用方式、出色的设计是很有可能的——但如果不重视用户体验,这个设计在证明它出色之…

优化见解

所谓的最优化,那就是实现资源的充分利用。而充分利用资源的方法,并不是让优势资源发挥更大潜力,而是让不同资源得到适当地配置,否则也达不到最优化。这就好比摩托车的能效是发挥到极致了,但并不表示整个过程就是极致。…

python路径长度限制_[windows] python 帮忙打开文件名太长限制

不知道你是否有遇到,在windows复制/移动文件的时候发生路径太长以致于无法复制/移动的情况?不知道你是否有遇到,在windows复制/移动文件的时候发生路径太长以致于无法复制/移动的情况?我大概每年发生个四、五次,在备份…

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

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