響應式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,智能電網,配電網 -
從智能電網到智能城市