Я столкнулся с сценарием в использовании RxJava, и я не совсем уверен, следует ли использовать Observable<T>
или окончательный ImmutableList<T>
.RxJava- Когда не использовать наблюдение?
В принципе, если я импортирую окончательный и неизменный набор данных один раз и никогда больше, должен ли я действительно разоблачить это как холодный 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>
, клиенты имеют один меньше монаду, чтобы иметь дело с за то, что всегда будет постоянным.
Однако, возможно, я теряю гибкость и должен использовать 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
даже для постоянных наборов данных, которые не будут меняться? Правильно ли, что я должен использовать последний для гибкости и легко меняющегося поведения?
Если ваши стратегии импортируются из db как ImmutableList, это звучит для меня как блокирующий процесс, который уже нарушает идею реактивности. – HuStmpHrrr
Это тоже перешло мне в голову. Полагаю, я хочу, чтобы вариант для выпущенных записей сразу начинал работать, а не блокировал их. – tmn