RxJava-何时不使用Observable?

时间:2015-09-19 13:31:27

标签: reactive-programming rx-java

我遇到了使用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即使对于不会改变的常量数据集?我是否应该使用后者来提高灵活性并轻松改变行为?

0 个答案:

没有答案