qingmei2/blogs

[译]使用MVI打造响应式APP(八):导航

qingmei2 opened this issue · 0 comments

[译]使用MVI打造响应式APP(八):导航

原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART 8 - NAVIGATION
作者:Hannes Dorfmann
译者:却把清梅嗅

上一篇博客中,我们探讨了协调模式是如何在Android中应用的。这次我想展示如何在Model-View-Intent中使用它。

如果您还不知道协调器模式是什么,我强烈建议您回过头来阅读上文内容

MVI中应用此模式与MVVMMVP没有太大区别:我们将lambda作为导航的回调传递给我们的MviBasePresenter。有趣的是我们如何在状态驱动的架构中触发这些回调?我们来看一个具体的例子:

class FooPresenter(
  private var navigationCallback: ( () -> Unit )?
) : MviBasePresenter<FooView> {  
  lateinit var disposable : Disposable
  override fun bindIntents(){
    val intent1 = ...
    val intent2 = ...
    val intents = Observable.merge(intent1, intent2)

    val state = intents.switchMap { ... }

    // 这里就是有趣的部分
    val sharedState = state.share()
    disposable = sharedState.filter{ state ->
      state is State.Foo
    }.subscribe { navigationCallback!!() }

    subscribeViewState(sharedState, FooView::render)
  }

  override fun unbindIntents(){
    disposable.dispose() // disposable 导航
    navigationCallback = null // 避免内存泄漏
  }
}

其**是:通过RxJavashare() 操作符,我们对通常用来对View层渲染状态的Observable进行复用,再加上通过与 .filter() 操作符的组合使用,达到能够监听到确定的状态,这之后,当我们观察到该状态时,触发对应的导航操作,然后协调器模式就像我之前的博客文章中描述的那样进行工作。


系列目录

《使用MVI打造响应式APP》原文

《使用MVI打造响应式APP》译文

《使用MVI打造响应式APP》实战


关于我

Hello,我是却把清梅嗅,如果您觉得文章对您有价值,欢迎 ❤️,也欢迎关注我的博客或者Github

如果您觉得文章还差了那么点东西,也请通过关注督促我写出更好的文章——万一哪天我进步了呢?