【发布时间】:2018-01-20 20:27:00
【问题描述】:
至少在移动应用程序中BehaviorSubject 经常使用,用于对属性进行建模 - 它具有当前值,可以随时查询和观察。
有时它只想转换 BehaviorSubject 而不订阅它。例如。如果有类,它充当几个转换后的BehaviorSubject 和潜在订阅者之间的中间层。
我在这里遇到的问题,至少在 RxJava2 中,是在 BehaviorSubject 上应用运算符总是返回 Observable。所以我的中间层不能再提供BehaviorSubject的api了。
一个可能的解决方案是创建新的BehaviorSubjects 并将它们订阅到原来的BehaviorSubject,但总体而言这似乎是一个坏主意,也许我现在不想订阅但只能按需订阅,即当我的中间层的用户真的需要这些主题吗?
在我的例子中,上下文是一个具有 MVVM 模式的 Android 应用程序,其中视图模型将 BehaviorSubject 暴露给视图,这些视图大部分来自应用程序中的另一个 BehaviorSubjects。我目前在视图模型中订阅,但我想改进这一点,因为视图模型不是真正的消费者,不应该订阅任何东西——当视图真正需要他们的东西时,应该激活主题。
不,我不能在视图模型中只使用 Observable,因为有单元测试和一些其他调用会检查某个点的值,而仅使用 Observable 是无法完成的。
我的主要问题是为什么不能简单地将BehaviorSubject 转换为另一个BehaviorSubject。也很高兴,在所描述的上下文中使用BehaviorSubject 的推荐方法是什么。
【问题讨论】: