MVI 笔记

Android MVI 架构的层次结构如下所示

MVI 架构层次

这个结构层次的一个基本规则是,外层依赖内层,而内层应该是独立于外层的,不能以来外层。比如说Use Case应该是依赖于Repo的,而不能依赖于ViewModel。整体数据的流向如下所示

MVI 架构数据流向

  • Model:根据业务需求设计出的data class,不依赖于任何其他模块并且不包含任何业务逻辑

  • Adapter: 转换网络接口返回或者数据库的实体数据,只是执行简单的数据转换职能。

  • Repo:封装从网络接口或者数据库读数据和写数据的操作。同时Repo层方法的输入输出应该只包含Model或者基础类型(其实有时候我的数据库实体类也是Model哈哈哈),例如

    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Singleton
    class AIExpandTaskRepo(
    private val aiExpandTaskDao
    ){
    fun getTask(id: Int): AIExpandTask{
    aiExpandTaskDao.getTask(id)
    }
    }

  • UseCase:负责具体应用场景下的业务逻辑

  • UiState: 描述UI状态的数据类,应该尽可能地方便UI层进行显示。由ViewModel进行管理和调整并通过flow被UI层订阅

  • ViewModel:管理UI状态并执行相应的业务逻辑如状态转换和用户操作响应(handle UserIntent)

  • UI Layer:应该是完全由UIiState驱动来显示UI的。


MVI 笔记
http://yolo-jbc.github.io/2024/02/16/Android/note/mvi_note/
作者
Jumping
发布于
2024年2月16日
许可协议