具有计算值的反应器设计
Reactor design with calculated values
我正在尝试弄清楚如何为将使用 Project Reactor 的应用程序进行设计。假设我有一个类似应用程序的电子表格,需要根据其他值更新值。有为值定义的公式。例如:
A = 1.5B + C
我认为 A、B 和 C 都是某种 Flux(但我不确定我会使用的具体实现),因为任何值都可能根据用户输入而改变,或者因为 C可能基于另一个公式(例如 C = D * E)。但是这里有一个转折点,如果 A.Jurisdiction = "MI",那么公式就变成了:
A = 1.25B + 1.25C
当然,除了商业现实是有各种各样的怪癖,也许有 20 种不同的变体,而不仅仅是两种。
我知道如何以面向对象的方式做到这一点,但我正在努力思考如何使用反应式 streams/Reactor 来做到这一点。
编辑:我想弄清楚how/if它可以完全以声明的方式完成。
根据我目前的研究,简短的回答是观看此视频并应用课程:
您似乎希望将您的单元格表示为 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
.
的输入
主要困难在于 "editable cells"(与 "formula cells" 相对,这里是 B 和 C)将用户输入的更新反映为 Flux<Double>
。
你可以看看 Flux.create()
例如。尝试将 UI 中的编辑事件桥接到 Flux<Double>
.
我正在尝试弄清楚如何为将使用 Project Reactor 的应用程序进行设计。假设我有一个类似应用程序的电子表格,需要根据其他值更新值。有为值定义的公式。例如:
A = 1.5B + C
我认为 A、B 和 C 都是某种 Flux(但我不确定我会使用的具体实现),因为任何值都可能根据用户输入而改变,或者因为 C可能基于另一个公式(例如 C = D * E)。但是这里有一个转折点,如果 A.Jurisdiction = "MI",那么公式就变成了:
A = 1.25B + 1.25C
当然,除了商业现实是有各种各样的怪癖,也许有 20 种不同的变体,而不仅仅是两种。
我知道如何以面向对象的方式做到这一点,但我正在努力思考如何使用反应式 streams/Reactor 来做到这一点。
编辑:我想弄清楚how/if它可以完全以声明的方式完成。
根据我目前的研究,简短的回答是观看此视频并应用课程:
您似乎希望将您的单元格表示为 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
.
主要困难在于 "editable cells"(与 "formula cells" 相对,这里是 B 和 C)将用户输入的更新反映为 Flux<Double>
。
你可以看看 Flux.create()
例如。尝试将 UI 中的编辑事件桥接到 Flux<Double>
.