Android:使用Kotlin搭建MVI架构模式

一、简介MVI架构模式

  • M:Model 数据层,包含应用数据和业务逻辑
  • V:View 界面层,在屏幕上显示应用数据,包含与界面相关的状态和界面逻辑,根据界面状态对象更新UI,界面状态定义是不可变的。这样的主要好处是,不可变对象可保证即时提供应用的状态
  • I:Intent, 处理界面事件(用户在与应用互动时生成的事件)

提醒:MVI架构遵循单向数据流 (UDF) 原则,在 UDF 中,状态仅朝一个方向流动。修改数据的事件朝相反方向流动。

二、单一数据源

在应用中定义新数据类型时,您应为其分配单一数据源 (SSOT)。SSOT 是该数据的所有者,而且只有此 SSOT 可以修改或转变该数据。为了实现这一点,SSOT 会以不可变类型公开数据;而且为了修改数据,SSOT 会公开函数或接收其他类型可以调用的事件。

此模式具有多种优势:

  • 将对特定类型数据的所有更改集中到一处。
  • 保护数据,防止其他类型篡改此数据。
  • 更易于跟踪对数据的更改。因此,也就更容易发现 bug。

在离线优先应用中,应用数据的单一数据源通常是数据库。在其他某些情况下,单一数据源可以是 ViewModel 甚至是界面。

三、单向数据流

单一数据源原则常常与单向数据流 (UDF) 模式一起使用。在 UDF 中,状态仅朝一个方向流动。修改数据的事件朝相反方向流动。

在 Android 中,状态或数据通常从分区层次结构中较高的分区类型流向较低的分区类型。事件通常在分区层次结构中较低的分区类型触发,直到其到达 SSOT 的相应数据类型。例如,应用数据通常从数据源流向界面。用户事件(例如按钮按下操作)从界面流向 SSOT,在 SSOT 中应用数据被修改并以不可变类型公开。

此模式可以更好地保证数据一致性,不易出错、更易于调试,并且具备 SSOT 模式的所有优势。

四、KotlinMVI demo演示MVI架构的使用

4.1 技术摘要
4.2 提醒
  • 创建ViewModel方式
    在BaseActivity和BaseFragment里统一通过反射(getDeclaredConstructor().newInstance())创建ViewModel
  • 如果没有封装成统一的方式,独立创建ViewModel
    在gradle里依赖androidx.activity:activity-ktx:xxx
    在Activity里,可以通过 by viewModels()
    在gradle里依赖androidx.fragment:fragment-ktx:xxx
    在Fragment里,可以通过 by activityViewModels()
4.3 项目结构图
4.3.1 baselib

在这里插入图片描述

4.3.2 app

在这里插入图片描述

4.3.3 WXArticleViewModel.kt代码图

WXArticleViewModel

4.3.4 WXArticleActivity.kt代码图

在这里插入图片描述

五、源码

点击查看gitee上的KotlinMVI源码demo

点击查看github上的KotlinMVI源码demo

  • 32
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值