我遇到了使用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
的情况?或者在一个被动的应用程序中,我是否应该始终使用Observable
即使对于不会改变的常量数据集?我是否应该使用后者来提高灵活性并轻松改变行为?