我想了解 Reactive Application 声明背后的原则是否可以使用非函数式语言来实现。
有人说,由于 FP 使用不可变状态和无副作用函数,因此更容易实现并发、分布式和弹性系统。
但我们如何使用 Java 来实现这一目标呢?
有一些框架,如 Apache Camel,有一些组件可以使用,如 Camel RX 和 Camel SEDA。
这些框架够用吗?
我会尝试澄清我的问题:
我认为响应式编程是一种新的编程范式,而一种新的编程范式需要新的工具和框架。
函数式语言以不同方式处理对象,这就是为什么有很多关于 FRP 基于事件和异步处理事物的文章。
但是现在,回到 Java 或其他面向对象的语言,让我们在 Web 应用程序中思考:
- 我们如何创建一个 java web 应用程序来利用好的 基于事件的前端。
- 然后,这些事件以平滑的方式将信息异步传递到后端。
- 后端可以轻松扩展并具有弹性。
我知道可以使用 java、servlet 和 EJB 创建满足这些要求的应用程序,但我的问题是,我们可以采用不同的方式吗? 更接近响应式(Reactive)方法?
我是这样想的:
- 一个漂亮的前端ajax框架,使与后端的“传递信息”顺畅。
- 在后端使用框架或库(Camel SEDA 或 Camel RX)并行执行的方法。
你认为这是一个好方法吗?
最佳答案
好吧,如果你看一下 Reactive manifesto你引用,你会看到“功能”这个词根本没有出现。相反,有 4 个特定标准用于定义什么是“响应式(Reactive)”应用程序:
- Event-driven
- Scalable
- Resilient
- Responsive
Java 中的任何内容都不能禁止您实现这些特征中的任何一个(除了对非常罕见、性能极高的场景的“响应式”)。 Java 中没有任何内容禁止您编写受限于不可变对象(immutable对象)和无副作用函数的代码(事实上,一些库,如 Guava,鼓励您使用不可变对象(immutable对象)和具体化函数).
像 RxJava 这样的框架可以通过提供一个面向数据流的事件驱动系统,进一步帮助您编写满足声明中定义的标准的应用程序,这基本上是 core tenet of reactive programming .
关于java - 是否可以使用非函数式语言构建响应式应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20751115/