第五章: 超越回调: 5.6 我应该使用哪个模型?

5.6 我应该使用哪个模型?

我们刚刚介绍了三种不同的异步编程模型,它们通常比回调更好。 对于您应该使用哪种模型来编写 Vert.x 应用程序,没有明确的答案。 选择一种模型或另一种模型基本上取决于您要实现的目标。

这是 Vert.x 的优点:您可以使用 RxJava 编写一个 Verticle,因为它使代码直接满足该 Verticle 的功能要求,并且您可以将 Kotlin 协程用于另一个 Verticle。 您可以在同一应用程序中混合和匹配模型。

Futures 和 Promise 是组合异步操作的简单有效的模型。 从版本 4 开始,它们被内置到 Vert.x 核心 API 中,它们提供了处理异步结果的基本工具:转换值 (map)、从错误中恢复 (recover/otherwise)、链接 ( flatMap) 和合成 (CompositeFuture)。 它们还提供与 JDK 中的 CompletionStage 的互操作性。

RxJava允许你以一种“函数式”和“声明式”的方式来推理事件流。它在错误管理和恢复方面特别强大。这些操作符用于重试失败的操作、处理超时以及在出现错误时将处理切换到另一个值或管道。然而,当构建长链(有时嵌套)操作符时,有“单子地狱”的固有风险,代码变得更难阅读。将处理拆分为多个方法是一个很好的策略。如果您不太熟悉函数式编程习惯用法,zipflatMapconcatMap等操作符就不一定有意义。此外,并不是所有的处理都容易表示为管道,特别是在涉及条件分支时。

Kotlin 协程具有生成看起来不像异步代码的代码的优势。 简单的错误管理案例可以用熟悉的 try/catch 块来表示。 虽然这里没有提到,但 Kotlin 协程支持 Go 编程语言风格的通道和选择器,这允许协程之间的消息传递。 话虽如此,更复杂的错误管理,例如重试,需要手动表达。 最后但同样重要的是,了解协程和异步编程的工作方式仍然很重要。

同样,没有明确的答案,因为所有模型都有其优点和缺点,但是根据您自己的经验和偏好,您可能会认识到在特定情况下应该使用哪种模型。 在本书的其余部分,我们将根据我们编写的示例使用不同的模型,但这并不意味着您不能用您喜欢的模型重写它们。

总结

  • 当涉及到组合异步操作时,回调具有表达性限制,如果不适当注意,它们会使代码更难以理解。
  • 并行和顺序异步操作可以与其他异步编程模型组成:futures 和 promises、reactive extensions 和 coroutines。
  • 反应式扩展有一组丰富的可组合操作符,它们特别适合事件流。
  • Futures 和 Promise 非常适合异步操作的简单链接。
  • Kotlin 协程为异步操作提供语言级别的支持,这是另一个有趣的选择。
  • 没有普遍良好的异步编程模型,因为它们都有自己喜欢的用例。 Vert.x 的好处是您可以根据您的问题域混合和匹配这些模型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值