外观
MVC、MVP、MVVM,拿同一个温度页面怎么区分?
标准回答
三者都在尝试把界面和业务分开。MVC 用 Controller 协调输入和模型;MVP 让 Presenter 通过 View 接口指挥界面;MVVM 让 ViewModel 暴露可观察状态,由界面按状态渲染。关键是职责怎么分,不是类名怎么写。
- Repository 负责数据入口与数据规则,避免 Activity 同时承担网络、缓存和业务决策。
- ViewModel 不应长期持有 Activity 或 View;状态保存还需考虑进程死亡。
- 划分模块时让依赖方向清楚,公共能力通过接口暴露,便于替换和测试。
通俗例子
点击“升温”后,MVP 的 Presenter 可能调用 view.showLoading()、view.showTemperature();MVVM 则更新包含 loading、temperature、error 的 UiState,页面观察它并绘制。
深入解释
**拿同一个按钮看职责:**View 接收“升温”事件;Presenter 或 ViewModel 处理交互规则;Repository 读取或提交数据。每一层负责的事情明确,页面就不必直接懂网络和硬件协议。
**MVVM 的状态怎样回到界面:**ViewModel 暴露当前温度、是否等待和错误信息等状态,View 观察后渲染。这样重建 View 时可以重新按状态显示,而不是必须重放所有旧的 showXxx 调用。
易混淆点
用了 ViewModel 这个类,并不自动等于完成了 MVVM 分层。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
job-A03