MVI模式多状态模型疑问:架构是否必须仅使用单一状态模型?
MVI 架构单状态模型疑问解答
首先澄清一个常见的认知误区:MVI 从未要求整个应用全局仅使用唯一的状态模型。
MVI 所强调的「单状态流」特性,是指单个独立业务场景、单个视图单元的上下文范围内,使用唯一的状态类承载该场景所有与视图渲染相关的状态,和全App全局状态复用完全是两个概念。
针对你提到的多Activity、跨业务域场景,完全可以按业务域拆分独立的状态模型:
- 犬只信息页可以单独定义专属状态类
DogInfoState,内部承载该页面的加载状态、犬只列表/详情数据、错误提示信息等内容 - Github用户信息页可以单独定义专属状态类
GithubUserState,内部承载对应用户的头像、昵称、仓库列表等业务数据
两个状态类互相独立、互不干扰,完全符合MVI的设计规范。
单状态设计的核心价值,是保证单个视图的状态有唯一可信源,避免同一个页面的状态分散在多个零散变量中,出现局部更新遗漏导致的视图显示异常问题,根本不是为了强制所有业务状态耦合到同一个对象中。
行业内的常规落地方式,都是给每个独立的视图单元(Activity/Fragment/独立Compose页面)对应独立的ViewModel,每个ViewModel内部维护自己私有的状态流,完全不需要把无关业务的状态塞到同一个模型里。如果有需要跨页面共享的全局状态(比如用户登录态、全局配置),单独维护全局的状态流供需要的模块订阅即可,无需和页面私有业务状态耦合。
内容的提问来源于stack exchange,提问作者Ji Sungbin
相关产品推荐
相关产品推荐

