【问题标题】:Reactor design with calculated values具有计算值的反应器设计
【发布时间】:2017-02-27 21:16:10
【问题描述】:

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

A = 1.5B + C

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

A = 1.25B + 1.25C

当然,商业现实是有各种各样的怪癖,也许有 20 种不同的变体,而不仅仅是两种。

我知道如何以 OO 方式执行此操作,但我正试图围绕如何使用反应流/反应器来完成此操作。

编辑:我试图弄清楚如何/是否可以完全以声明方式完成。

【问题讨论】:

    标签: project-reactor


    【解决方案1】:

    看起来您希望将您的单元格表示为 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&lt;Double&gt;。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2019-06-22
        • 2018-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多