gpt4 book ai didi

reactive-programming - RxJava- 何时不使用 Observable?

转载 作者:行者123 更新时间:2023-12-04 00:14:56 25 4
gpt4 key购买 nike

我在使用 RxJava 时遇到了一个场景,我不太确定是否应该使用 Observable<T>或最终 ImmutableList<T> .

基本上,如果我一次导入一个最终且不可变的数据集,我真的应该将其暴露为冷 Observable<T> ?

public final class StrategyManager {

private static final StrategyManager instance = new StrategyManager();

private final ImmutableList<Strategy> strategies;

private StrategyManager() {
strategies = //import from db
}
public Observable<Strategy> getStrategies() {
return Observable.from(strategies);
}
public static StrategyManager get() {
return instance;
}
}

或者我应该将它公开为 ImmutableList<T> ?
public final class StrategyManager {

private static final StrategyManager instance = new StrategyManager();

private final ImmutableList<Strategy> strategies;

private StrategyManager() {
strategies = //import from db
}
public ImmutableList<Strategy> getStrategies() {
return strategies;
}
public static StrategyManager get() {
return instance;
}
}

如果我将其公开为 ImmutableList<T> ,客户少了一个 monad 来处理一些永远不变的事情。

但是,也许我失去了灵活性,应该使用 Observable<T> .例如,我可以决定使用 RxJava-JDBC 在每次调用时直接查询数据,而无需任何缓存。或者我可以 cache()甚至 replay()所以数据可以过期并释放内存。
public final class StrategyManager {

private static final StrategyManager instance = new StrategyManager();

private final Observable<Strategy> strategies;

private Database db = null;

private StrategyManager() {
strategies = db.select("SELECT * FROM STRATEGY")
.autoMap(Strategy.class)
.replay(1, TimeUnit.MINUTES)
.autoConnect();
}
public Observable<Strategy> getStrategies() {
return strategies;
}
public static StrategyManager get() {
return instance;
}
}

所以我的问题是,是否有不使用 Observable 的情况? ?或者在响应式(Reactive)应用程序中,我应该总是使用 Observable即使对于不会改变的恒定数据集?我应该使用后者以获得灵活性和容易改变的行为吗?

最佳答案

我喜欢这个问题。我认为决定使用响应式(Reactive) API 涉及很多因素,没有明确的"is"或“否”答案,只是对 future 可能发生的事情的判断。

should I always use an Observable even for constant data sets that will not change?



如果你想要最大的灵活性,不要介意使用 RxJava 给客户端带来负担,不要介意调试困难(你已经看到了很长的 RxJava 堆栈跟踪),然后使用 Observable。请注意,即使对于“不会更改的常量数据集”,您的内存限制也可能会发生变化,并且大型数据集可能不再适合保存在内存中。

要记住的另一件事是,Observables 确实有一些处理开销(链中可能每个操作符的每次发射的 volatile 读取),因此出于性能原因,有时不使用它是好的。

你的用例、你的数据和你的基准将真正决定你走哪条路。

从 Netflix(和其他任何地方)的 API 设计师那里听到他们的经验会很有趣。

关于reactive-programming - RxJava- 何时不使用 Observable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32668821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com