Jetpack Compose尝鲜(1)-MVI架构
一、引子
博主在学习Jetpack Compose时,由于引入的各种渲染状态十分混乱,导致了代码十分混乱,而且状态管理也耗费精力,所以一直在寻找是否有一种可以解决这个问题的架构。在偶然的一次资料查询中,MVI
架构走入了我的视线,本文就如何简单实现这个架构做个演示。
二、MVI
的含义
2.1 M(model)
在MVI
架构中,model
与其他架构的定义有所不同它主要承接的是需要渲染的UIState
和各种数据流(Data Flow
)。UIState
包括各种UI Layer
所需要渲染的数据,可以实时的变化。
2.2 V(view)
在MVI
架构中,view
与其他架构的定义大致相同,不过在MVI
中View
需要订阅UIState
,其根据UIState
刷新UI
。
2.3 I(intent)
在MVI
架构中,intent
是新提出的概念,中文翻译为意图,如果不太好理解可以简单的理解为用户对界面的交互操作或者用户想要程序实现的功能。
三、MVI
的简单实现
目前MVI
架构的实现存在则几种方法,其中有使用Channel
实现的,但博主在学习时并没有掌握,但在观看资料与教程视频中学习到了一种简单的实现。
3.1 UIState
无需页面加载状态:
data class ExampleState(
val exampleState1: String,
val exampleState2: String,
val exampleState3: String
)
需要页面加载状态:
sealed class ExampleState {
// 正在加载
data object Loading : ExampleState()
// 加载成功
data class Success(
val exampleState1: String, val exampleState2: String, val exampleState3: String
) : ExampleState()
// 加载失败