Android MVI 设计模式(1)

Android MVI 设计模式(1)_第1张图片

MVI 设计模式专注于 web 世界,也就是请求数据然后将数据展示给用户。其实服务端来数据就像数据流,数据流会有许多状态需要开发者对其处理。现在已经有了许多解决方案,像 MVC  MVP MVVM 来解决这些问题,那么我们为什么还需要 MVI,也就是 MVI 相对于他们有什么不同和优势呢?

Android MVI 设计模式(1)_第2张图片

使用 MVP 来请求后台数据,这里在 Presenter 我们不得根据请求(或者叫数据流)不同状态来处理状态,例如显示加载器,展示数据,隐藏加载器等…。其实 presenter 问题。我现在项目用的就是 MVP 。

Android MVI 设计模式(1)_第3张图片


Android MVI 设计模式(1)_第4张图片
Android MVI 设计模式(1)_第5张图片

同样的问题也发生在 MVVM 设计模式中,这里代码我们需要根据数据的状态,传入 false 或 true 给 loading.setValue 方法来控制是否显示加载器。 单看上面的代码你可能没有什么柑橘,不过实际开发起来,看到大部分重复的代码,你就烦了。

Android MVI 设计模式(1)_第6张图片
Android MVI 设计模式(1)_第7张图片

由于开发web 应用,我们会根据网络的情况而受到制约,这给开发者的开发和调试带来不少麻烦。

Android MVI 设计模式(1)_第8张图片

这里我们用户界面,一个用户,用户通过点击(操作)来触发一个 intent,我们都知道在 Android 中 intent 可以启动一个 Activity 或一个 service。这里叫做 intent  是因为我们用户改变了他兴趣点。同时也启动我们的状态机,状态机进行一些处理然后返回一个新的状态。

Android MVI 设计模式(1)_第9张图片

我们先看一眼 State(状态机)长什么模样,其实这里状态机就是我们定义一个 State 类。提供页面的状态,例如加载中,显示内容或是提示错误等。

Android MVI 设计模式(1)_第10张图片
Android MVI 设计模式(1)_第11张图片
Android MVI 设计模式(1)_第12张图片

看一下架构图,当View 发生了变化,通知 ViewModel 或是Presenter,让后由他们传递给StateMachine(状态机),状态机处理业务逻辑,并产生一个新的state(状态)返回 presenter/ViewModel,最终根据状态来更新 View。

你可能感兴趣的:(Android MVI 设计模式(1))