是否可以使用非功能语言构建反应式应用程序?

edu*_*nti 3 java functional-programming apache-camel reactive-programming

我想了解是否可以使用非功能语言实现反应性应用程序宣言背后的原则.

有人说,由于FP使用不可变状态和自由副作用函数,因此它们更容易实现并发,分布式和弹性系统.

但是我们如何使用Java实现这一目标呢?

有一些像Apache Camel这样的框架,有一些可以使用的组件,比如Camel RXCamel SEDA.

这些框架是否足够?

我会尽力澄清我的问题:

我认为反应式编程是新的编程范式,而新的编程范式需要新的工具和框架.

功能语言以不同的方式处理对象,这就是为什么有很多关于FRP使用基于事件和异步的事情的文章.

但现在,支持Java或其他面向对象的语言,让我们在Web应用程序中思考:

  1. 我们如何创建一个利用基于事件的好前端的java Web应用程序.
  2. 然后,这些事件以平滑的方式异步传递信息到后端.
  3. 后端可以轻松扩展并具有弹性.

我知道可以创建一个使用java,servlet和EJB来完成这些需求的应用程序,但我的问题是,我们可以采用不同的方式吗?更接近被动方法?

我想是这样的:

  • 前端的一个漂亮的ajax框架,使得后端的"传递信息"顺利进行.
  • 在后端使用框架或库(Camel SEDA ou Camel RX)并行执行的方法.

你认为这是一个好方法吗?

mik*_*łak 5

好吧,如果你看一下你引用的Reactive宣言,你会发现那里没有出现"functional"这个词.相反,有4个特定标准用于定义"被动"应用程序是什么:

  • 事件驱动
  • 可扩展
  • 弹性
  • 响应

Java中没有任何内容禁止您实现任何这些特征(除非极为罕见,极其高性能的场景"响应").并没有在Java中禁止你写约束为不可变对象和无副作用函数的代码(实际上,一些库,如番石榴,鼓励您使用不可变对象以及具体化功能).

像RxJava这样的框架可以通过提供面向数据流的事件驱动系统来进一步帮助您编写满足宣言中定义的标准的应用程序,这基本上是反应式编程核心原则.