原文出处:http://blog.chengyunfeng.com/?p=947
为何使用RxJava
用户希望查看实时的数据,他们现在就要看最新的微博;他们的订单立刻就被确认;价格需要现在定下;在线游戏需要及时响应。作为码农,你需要发送并忘记的( 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 的场景:
1、应当使用 Rx
- UI 事件响应,例如 鼠标移动、按钮点击事件
- Domain 事件,例如 属性改变、集合更新、订单提交、注册成功 等
- 基础架构事件,例如 文件监视、系统事件 等
- 集成事件,例如从一个消息队列来的一个广播;来自于 WebSockets - - API 的推送事件 等
- CEP 集成事件,例如 StreamInsight 或者 StreamBase.
2、可以使用 Rx
- Future 的结果或者类似的模式
这些模式已经工作的很好的,使用 Rx 在这些情况下对开发过程并不会有太多的提升。
3、不要使用 Rx
把 iterables 变成 observables, 只是为了在 Rx 库中使用它们。
Read more: http://blog.chengyunfeng.com/?p=947#ixzz4KaNsDUkI