前言
Android 开发的架构模式最流行的莫过于 Jetpack 架构组件提供的强大易用的 MVVM 实现;去年公司要重构一块老旧的重要业务,原先的 Java + 无架构实现被我们全面切换到 Kotlin + Coroutines + Jetpack AAC。总体效果令我们颇为满意,也没有发现什么明显的缺陷与短板
Jetpack AAC 虽然很赞,但它不能用于 KMM,于是我们在开源社区找到了一个“替代品”——MVIKotlin
MVIKotlin 是一款实现 MVI 模式的框架,它不仅能用于 KMM,还能用于 JavaScript、JVM、LinusX64、MacX64 等多个 Kotlin Target
MVI架构模式
MVI表示的是Model-View-Intent.这个模式最近才被引入Android;受到Cycle.js框架的思路影响,是基于单向圆柱流的原理进行工作的
● Model
:
不像其它架构模式的Model
,在MVI
架构中Model
表示UI
的状态。举个例子,UI
可能会存在不同的状态,比如数据加载Data Loading
,加载完成Loaded
,用户的动作造成数据的改变
,错误
,用户当前屏幕位置状态
等等,每一个状态都被存储到Model
对象中
● View
:
在MVI
中View
作为接口,可以在Activity
或者Fragment
中实现。这个接口的意思就是需要有一个容器来接收不同状态并进行展示。它们使用可观察的Intent
(这里的Intent
并不是传统的Android Intent,这里应该取Intent的本意,意图)来回应用户的动作
● Intent
:
这个并不是之前所提到的Android Intent
.用户的动作的结果作为输入值传递给Intent
。回过来,我们可以说,我们将会发送Models
作为输入给Intent
,然后通过View
加载这些Model
的状态