三个禅宗反应性扩展

反应式扩展 ”不仅仅是一个框架。 至少因为每个流行的YP都有几乎相同的实现(针对特定的语言功能和相应的优化实践进行了调整)。 Yesenin声称“可以从远处看到大物体”。 在本文中,我将撤退到不同的“距离”并描述我所看到的。

禅先


我看到了经典Iterator'GoF实现的推送版本。 因此,我已经写过有关此内容的文章,没有细节。

对那些懒得看书的人的简短复述
关键观察者是Iterator经典实现的(几乎)“镜像”。 为什么“差不多”-在先前给定链接的帖子中进行了解释。 重要说明:“镜面反射”是一个没有五分钟的数学定义,可以严格形式化

在此距离下,推拉系统之间的差异清晰可见。 经过这样的启发,每次git push和git pull都会引起几乎敬畏的敬畏感。 您开始四处浏览代码,并提出有关对偶的神圣问题。

禅第二


“某些事情继续进行”(下一种方法),“某些事情结束了”(完成的方法),“一切都出了问题”(错误方法)-三个陈述可以描述随着时间的推移而发展的任何过程。 而且,很容易从物理时间中抽象出来,用“状态序列”(系统在其中找到自己)代替它。 Rx允许您将多种算法简化为一个接口(在某种意义上,程序员与其他程序员,更重要的是与机器达成“协议”),而对表现力(可能的状态数)或(可选:同步)没有任何限制,异步或多线程)执行。

由此得出最重要的结论:一个rx是一个过程。 并且,如果复杂过程由n个子过程组成,则...一个“高阶” rx,它控制n个rx“一阶”的操作。 类似于高阶函数

禅三


用功能类比? 是的,功能。 最后一个最有力的见解是rx只是一个函数的修饰-编程的,而不是数学的:rx的生存时间太长; 常规函数能够返回结果; 只有一次。 接下来(结果); -这是return的“可重用”版本。 因此,最重要的结论是:可以用rx完成数学(纯)和普通OOP函数(包括curryingcomposition等,而本文中没有涉及的更多功能)可以完成的所有操作。 函数是阻塞和异步的:rx也是。 函数可以返回函数:rx也可以。 函数可以递归:rx也可以。 函数计算可以被缓存:在rx中也可以。
奇怪的是,在了解这一阶段的过程中,您不由自主地返回了...函数式编程。 不是出于声明性的目的,也不是出于豁免的目的-这些都是(可选)奖金。 在“功能性”中,因为它被迫根据功能及其组成来思考; 根据不变法则,“一个rx是一个过程”,就是函数(不是类,抽象类,接口或其他任何东西)成为设计中的“起点”。

我都拥有

Source: https://habr.com/ru/post/zh-CN441452/


All Articles