具有计算值的反应器设计

时间:2017-02-27 21:16:11

标签: project-reactor

我正在试图弄清楚如何为使用Project Reactor的应用程序整理设计。假设我有一个类似于应用程序的电子表格,需要根据其他值更新值。有为这些值定义的公式。例如:

A = 1.5B + C

我认为A,B和C都是某种Flux(但我不确定我将使用的具体实现),因为任何值都可能根据用户输入而改变,或者因为C可能是基于另一个公式(例如C = D * E)。但这是扭曲,如果A.Jurisdiction =“MI”,则公式变为:

A = 1.25B + 1.25C

除了商业现实之外,还有各种各样的怪癖,也许有20种不同的变化,而不仅仅是两种。

我知道如何以OO的方式做到这一点,但我正试图围绕如何使用反应流/ Reactor来做到这一点。

编辑:我正在试图弄清楚如何以声明的方式完成它。

2 个答案:

答案 0 :(得分:0)

到目前为止,根据我的研究,简短的回答是观看此视频并应用课程:

Developing Reactive applications with Reactive Streams and Java 8 by Brian Clozel, Sébastien Deleuze - Devoxx

答案 1 :(得分:0)

您希望将您的单元格表示为Flux<Double>,并且对所有单元格的每次更新都将是所述通道中的onNext事件,并传播到相关单元格?

要将单元格绑定在一起,combineLatest将会被调整。你可以做这样的事情(以你的特定例子为例):

public Flux<Double> cellA() {
    if (A.Jurisdiction.equals("MI")) {
        return Flux.combineLatest(cellB(), cellC(), (b, c) -> 1.25d * b + 1.25d * c);
    } else {
        return Flux.combineLatest(cellB(), cellC(), (b, c) -> 1.5d * b + c);
    }
}

每次在源单元格中出现新值时,A的通量将更新,使用该新值和最后看到的值来自另一个通量作为BiFunction的输入。

主要难点在于“可编辑单元格”(与“公式单元格”相对,此处为B和C),以将用户输入的更新反映为Flux<Double>

您可以查看Flux.create()例如。尝试将UI中的编辑事件桥接到Flux<Double>