【发布时间】:2018-01-16 03:39:10
【问题描述】:
我目前正在实现一个具有 view-viewmodel 循环依赖的模式。虽然它真的不是依赖,因为他们彼此不了解,但他们所知道的只是有一个事件流和一个状态流。我想出了一个想法,让 viewModel 实现一个名为 toTransformer() 的函数,该函数返回一个 ObservableTransformer,它由两个主题组成,一个事件主题和一个状态主题。
private val eventStream: PublishSubject<MainEvent> = PublishSubject.create()
private val stateSink: BehaviorSubject<MainState> = BehaviorSubject.create()
...
fun asTransformer(): ObservableTransformer<MainEvent, MainState> =
ObservableTransformer {
it.subscribe { eventStream.onNext(it) }
stateSink
}
而且是这样使用的
view.events().compose(viewModel.asTransformer()).subscribe { view.render(it) }
问题
- 可以这样做吗?
- 此实施可能出现什么问题。
- 如果订阅被释放,内部订阅会被释放吗?
- 能否改进为更好的形式?
编辑
这就是事件和状态的关系。
eventStream.map { it.toAction() }
.compose(actionToResult())
.scan (MainState.initial(), reducer())
.subscribe {
stateSink.onNext(it)
}
【问题讨论】:
-
状态是如何从事件中导出的?不清楚你是怎么处理的?
-
嗨@yosriz,请看编辑
标签: android kotlin rx-java rx-java2