响应式API的设计、实现和应用
在本例中,值和错误都传递给了订阅服务器。需要记住的是,当使用CountDownLatch时,只有一个onError()或onComplete()被调用。因此,在错误和成功的情况下你都必须要释放锁。
可组合方法引用
正如你所想象的,任何严重依赖于lambdas的编程模型都容易受到“回调地狱”的影响。但是,具有一定的规范和方法引用,就不是问题了。所有明智的Ruby开发人员都会告诉你的是,小的私有方法(甚至只有一行程序!)在可读性方面非常有价值。如果你很好地为方法命了名并使用方法引用语法,那么你就可以创建出非常可读的流。
public Flux<ApplicationSummary> list() { return Mono .zip(this.cloudFoundryClient, this.spaceId) .flatMap(function(DefaultApplications::requestSpaceSummary)) .flatMapMany(DefaultApplications::extractApplications) .map(DefaultApplications::toApplicationSummary); }
在这个例子中,这个流就很易读。为了获得一个Flux
点自由风格
在本文中,你可能已经注意到我们使用了非常紧凑的风格。 这叫做Pointfree style。它的主要好处是它帮助开发人员站在编写函数(高层关注)的角度来思考,而不是摆弄数据(低层次的关注)。我们不会说在编写响应式编程时这是一个硬性要求,但是我们发现大多数人最终都更喜欢它。
Mono<Void> deleteApplication(String name) { return PaginationUtils .requestClientV2Resources(page -> this.client.applicationsV2() .list(ListApplicationsRequest.builder() .name(name) .page(page) .build())) .single() .map(applicationResource -> applicationResource.getMetadata().getId()) .flatMap(applicationId -> this.client.applicationsV2() .delete(DeleteApplicationRequest.builder() .applicationId(applicationId) .build())); }
如果你看一下这个例子,你会发现许多地方在分配变量、返回结果,通常这让它看起来更像传统的命令式代码。而这,并不会增加它的可读性。相反,添加更多的大括号、分号、等号和返回语句,虽然识别了数据来自哪里,希望能够更加明确,但可能会混淆流本身实际的重点。
响应式编程是一个巨大的课题,几乎每个人都在开始接触它。在编写响应式代码时,“错误”的选择非常少,但同时,大量的选择会让许多开发人员感到困惑,不知道什么是最好的入门方法。我们的意见来自于一个大型项目的经验,我们希望它能对你的响应式之旅有所帮助,我们鼓励你通过实验来推动技术发展,并将你的发现回馈给社区。
责任编辑:售电衡衡
-
权威发布 | 新能源汽车产业顶层设计落地:鼓励“光储充放”,有序推进氢燃料供给体系建设
2020-11-03新能源,汽车,产业,设计 -
中国自主研制的“人造太阳”重力支撑设备正式启运
2020-09-14核聚变,ITER,核电 -
探索 | 既耗能又可供能的数据中心 打造融合型综合能源系统
2020-06-16综合能源服务,新能源消纳,能源互联网
-
新基建助推 数据中心建设将迎爆发期
2020-06-16数据中心,能源互联网,电力新基建 -
泛在电力物联网建设下看电网企业数据变现之路
2019-11-12泛在电力物联网 -
泛在电力物联网建设典型实践案例
2019-10-15泛在电力物联网案例
-
权威发布 | 新能源汽车产业顶层设计落地:鼓励“光储充放”,有序推进氢燃料供给体系建设
2020-11-03新能源,汽车,产业,设计 -
中国自主研制的“人造太阳”重力支撑设备正式启运
2020-09-14核聚变,ITER,核电 -
能源革命和电改政策红利将长期助力储能行业发展
-
探索 | 既耗能又可供能的数据中心 打造融合型综合能源系统
2020-06-16综合能源服务,新能源消纳,能源互联网 -
5G新基建助力智能电网发展
2020-06-125G,智能电网,配电网 -
从智能电网到智能城市