11、MVP、MVVM、MVI 区别
1、MVP
- 分层:View / Presenter / Model
- Presenter 中间调停,View 和 Model 不能直接通信
- View 和 Presenter 互相持有引用,接口回调耦合高
- 缺点:接口多、Presenter 容易臃肿、难单元测试
2、MVVM
- 分层:View / ViewModel / Model
- ViewModel 不持有 View 引用,通过 LiveData/StateFlow 观察者模式 双向通信
- 没有大量接口,解耦更强,支持数据驱动 UI
- 适配 Jetpack、Compose,可单元测试,比 MVP 更优雅
3、MVI
- 是 MVVM 进阶规范,统一单向数据流
- 三层核心:Intent (用户意图) → State (单一状态) → View (渲染 UI)
- 整个页面只有一个唯一 State,所有 UI 都由 State 渲染
- 数据单向流动,不乱改状态,适合复杂页面、可追溯、易维护
一句话区分(面试直接说)
- MVP:Presenter 中间人,View 和 P 互相持有,接口多、耦合高。
- MVVM:ViewModel 配合可观察数据,数据驱动 UI,解耦无强引用。
- MVI:在 MVVM 基础上,规范单向数据流、单一数据源 State,架构更统一、适合复杂项目。