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

HomerBelbin 9年前
   <h2>Why Rx</h2>    <blockquote>     <p>用户希望查看实时的数据,他们现在就要看最新的微博;他们的订单立刻就被确认;价格需要现在定下;在线游戏需要及时响应。作为码农,你需要发送并忘记的( fire-and-forget )消息。你不希望发送一个消息然后阻塞等待结果返回。当结果返回的时候,你希望结果推送给你。当处理的结果是一个集合数据的时候,你更希望逐个的接收到每个结果;你不希望等待整个结果集合都完成后一起返回。世界已经进步到推送的情景了;用户期待我们能跟上他们的步伐。码农有工具来推送数据了,推送数据很简单。码农需要工具来响应推送的数据。</p>    </blockquote>    <p>欢迎来到 RxJava 系列教程,RxJava 是由大名鼎鼎的 Netflix 公司在开发软件过程中应用 Rx.NET 思想解决实际问题,并最总提炼出来的一套应用于 Java 的 Rx 框架。Rx 是一个优雅解决问题的框架,functional programmer 对该框架比较熟悉。Rx 有如下一些优点:</p>    <ul>     <li>统一性(Unitive)</li>     <li>      <ul>       <li>Rx 中的查询是使用和 functional programming 通用的风格实现的,例如前面介绍的 <a href="http://www.open-open.com/lib/view/open1461572602015.html">Java 8 中的 Streams 和 Lambda表达式</a>。在 Rx 里面,可以在事件上使用 functional 风格的转换操作。</li>      </ul> </li>     <li>扩展性(Extensible)</li>     <li>      <ul>       <li>RxJava 可以自定义操作函数。虽然 Java 的语法现在导致自定义操作函数有点麻烦。RxJava 提供了所有的可扩展性来支持其他运行 Jvm 上语音的支持,比如 kotlin、scale 等。</li>      </ul> </li>     <li>描述性(Declarative)</li>     <li>      <ul>       <li>Functional transformations are read in a declarative way.</li>      </ul> </li>     <li>组合性(Composable)</li>     <li>      <ul>       <li>Rx 的操作函数可以组合起来形成更加复杂的操作</li>      </ul> </li>     <li>转换性(Transformative)</li>     <li>      <ul>       <li>Rx 操作函数可以把一个类型的数据转换为另外一种需要的类型,根据需要还可以过滤、映射、扩展数据流。</li>      </ul> </li>    </ul>    <h2>何时应该使用 Rx?</h2>    <p>Rx 适合组合和消耗一系列的事件(数据)。下面是一些使用 Rx 的场景:</p>    <h2>应当使用 Rx</h2>    <ul>     <li>UI 事件响应,例如 鼠标移动、按钮点击事件</li>     <li>Domain 事件,例如 属性改变、集合更新、订单提交、注册成功 等</li>     <li>基础架构事件,例如 文件监视、系统事件 等</li>     <li>集成事件,例如从一个消息队列来的一个广播;来自于 WebSockets API 的推送事件 等</li>     <li>CEP 集成事件,例如 <a href="/misc/goto?guid=4959671530059600534">StreamInsight</a> 或者 StreamBase.</li>    </ul>    <h2>可以使用 Rx</h2>    <ul>     <li>Future 的结果或者类似的模式<br> 这些模式已经工作的很好的,使用 Rx 在这些情况下对开发过程并不会有太多的提升。</li>    </ul>    <h2>不要使用 Rx</h2>    <ul>     <li>把 iterables 变成 observables, 只是为了在 Rx 库中使用它们。</li>    </ul>    <p><br> <br> 来源:<a href="/misc/goto?guid=4959671530145635916">云在千峰</a></p>