【问题标题】:Reason for using reactive programming in simple cases在简单情况下使用反应式编程的原因
【发布时间】:2017-11-11 17:33:18
【问题描述】:

拜托,谁能解释一下使用响应式风格的好处是什么:

Observable<String> greeting = Observable.just("Hello");
Observable<String> yelling = greeting.map(s -> s.toUppercase());

而不是简单的命令式风格:

String greeting = "Hello";
String yelling = greeting.toUppercase();

我理解响应式编程,就像数据库访问、UI、计算、网络访问等的相同“API”。但是为什么我们需要使用响应式编程来进行简单的toUppercase

【问题讨论】:

    标签: rx-java reactive-programming rx-java2 imperative-programming


    【解决方案1】:

    除了所有无阻塞功能之外,使用反应式编程的另一个重要功能是背压的重要使用。通常用于发布者发出的信息超出消费者处理能力的情况。

    因此,有了这种机制,您就可以控制两者之间的流量并避免令人讨厌的内存不足问题。

    你可以在这里https://github.com/politrons/reactive看到一些反应式编程的实际例子

    关于这里的背压https://github.com/politrons/Akka/blob/master/src/main/scala/stream/BackPressure.scala

    顺便说一句,响应式编程的唯一缺点是学习曲线,因为您正在改变编程范式。但如今所有重要的公司都尊重并遵循被动宣言http://www.reactivemanifesto.org/

    如果你想看一些实际的例子你可以参考这里https://github.com/politrons/reactive

    【讨论】:

    • 嗨@Paul,反应式编程在幕后使用 NIO 吗?谢谢
    • 它是否被任何知名公司使用?在财富 100 强中?
    【解决方案2】:

    您可以使用 响应式编程 做的所有事情,您也可以使用简单的函数或简单的事件监听器来做。

    在异步编程中:反应式编程在大多数情况下无法甚至使您的代码库更小更易于阅读。但它会让您的代码更健壮易于扩展以供日后使用。

    当数据作为流发送时特别好,尤其是当有多个元素在不同时间推送到流上,并且您需要做与时间相关的事情时,反应式编程使代码更易于维护。

    【讨论】:

      【解决方案3】:

      你是对的,你不需要使用 RxJava “for simple toUppercase”。 当您使用异步数据流时,反应式编程具有优势。

      【讨论】:

        【解决方案4】:

        在您给出的上述示例中,没有真正使用反应式编程。它以不同的方式完成工作。

        反应式编程的真正优势在于,当您处理数据流并希望以一种可以在首选线程上运行的简单有效的方式对它们进行操作时。反应式编程有很多运算符,这让新手程序员感到害怕,但是一旦您学习了基础知识,就会更容易理解哪个运算符适合您的需求。

        看看这篇文章Simple background polling with RxJava,想想如何用几行代码在纯java中获得同样的效果。

        我总是喜欢更多的代码行。我的辩护是,更多的代码行意味着更容易理解。但是,一旦您开始与庞大的团队一起从事大型项目,就很难理解代码库。

        下面这两者哪个更容易理解?

        take(10);
        

        int limit = list.size() < 10 ? list.size() : 10;
        for (int i = 0 ; i < limit ; i ++) {
            Log.d("Value", list.get(i));
        }
        

        两者都获得列表中的前 10 个项目。如果列表较小,则获取总大小。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-02-07
          • 2012-08-28
          • 2018-09-21
          • 2021-02-14
          • 1970-01-01
          • 2014-06-26
          • 1970-01-01
          • 2020-11-29
          相关资源
          最近更新 更多