Skip to content
阅读进度

MVC、MVP、MVVM,拿同一个温度页面怎么区分? ​

返回 架构与 SDK 目录

标准回答 ​

三者都在尝试把界面和业务分开。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 分层。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。