RxJava 教程第一部分:入门之 Why Rx

作者: rain 分类: 移动 发布时间: 2016-03-27 18:28 6 条评论

Why Rx

用户希望查看实时的数据,他们现在就要看最新的微博;他们的订单立刻就被确认;价格需要现在定下;在线游戏需要及时响应。作为码农,你需要发送并忘记的( fire-and-forget )消息。你不希望发送一个消息然后阻塞等待结果返回。当结果返回的时候,你希望结果推送给你。当处理的结果是一个集合数据的时候,你更希望逐个的接收到每个结果;你不希望等待整个结果集合都完成后一起返回。世界已经进步到推送的情景了;用户期待我们能跟上他们的步伐。码农有工具来推送数据了,推送数据很简单。码农需要工具来响应推送的数据。

欢迎来到 RxJava 系列教程,RxJava 是由大名鼎鼎的 Netflix 公司在开发软件过程中应用 Rx.NET 思想解决实际问题,并最总提炼出来的一套应用于 Java 的 Rx 框架。Rx 是一个优雅解决问题的框架,functional programmer 对该框架比较熟悉。Rx 有如下一些优点:

  • 统一性(Unitive)
    • Rx 中的查询是使用和 functional programming 通用的风格实现的,例如前面介绍的 Java 8 中的 Streams 和 Lambda表达式。在 Rx 里面,可以在事件上使用 functional 风格的转换操作。
  • 扩展性(Extensible)
    • RxJava 可以自定义操作函数。虽然 Java 的语法现在导致自定义操作函数有点麻烦。RxJava 提供了所有的可扩展性来支持其他运行 Jvm 上语音的支持,比如 kotlin、scale 等。
  • 描述性(Declarative)
    • Functional transformations are read in a declarative way.
  • 组合性(Composable)
    • Rx 的操作函数可以组合起来形成更加复杂的操作
  • 转换性(Transformative)
    • Rx 操作函数可以把一个类型的数据转换为另外一种需要的类型,根据需要还可以过滤、映射、扩展数据流。

何时应该使用 Rx?

Rx 适合组合和消耗一系列的事件(数据)。下面是一些使用 Rx 的场景:

应当使用 Rx
  • UI 事件响应,例如 鼠标移动、按钮点击事件
  • Domain 事件,例如 属性改变、集合更新、订单提交、注册成功 等
  • 基础架构事件,例如 文件监视、系统事件 等
  • 集成事件,例如从一个消息队列来的一个广播;来自于 WebSockets API 的推送事件 等
  • CEP 集成事件,例如 StreamInsight 或者 StreamBase.
可以使用 Rx
  • Future 的结果或者类似的模式
    这些模式已经工作的很好的,使用 Rx 在这些情况下对开发过程并不会有太多的提升。
不要使用 Rx
  • 把 iterables 变成 observables, 只是为了在 Rx 库中使用它们。

本文出自 云在千峰,转载时请注明出处及相应链接。

本文永久链接: http://blog.chengyunfeng.com/?p=947

Ɣ回顶部