题目
移动端架构模式基础比较
信息
- 类型:问答
- 难度:⭐
考点
MVC,MVP,MVVM,架构模式区别
快速回答
移动端三大基础架构模式的核心区别:
- MVC:Controller处理业务逻辑,直接操作Model和View
- MVP:Presenter作为中间层,View通过接口与Presenter交互
- MVVM:ViewModel通过数据绑定自动同步View状态
关键差异:MVVM的耦合度最低,MVP测试性最好,MVC实现最简单。
解析
1. 原理说明
移动端架构模式的核心目标是解耦业务逻辑与UI:
- MVC(Model-View-Controller):
- Model:数据模型(如用户数据类)
- View:UI展示(如XML布局)
- Controller:业务逻辑处理(如Activity/Fragment)
- MVP(Model-View-Presenter):
- Presenter取代Controller,通过接口与View通信
- View不直接操作Model
- MVVM(Model-View-ViewModel):
- ViewModel暴露数据流(如LiveData)
- View通过数据绑定自动更新(如Jetpack Data Binding)
2. 代码示例对比
MVC 伪代码(Android示例):
// Controller (Activity)
class UserActivity extends Activity {
void onCreate() {
TextView nameView = findViewById(R.id.name);
// 直接操作View和Model
User user = UserRepository.getUser();
nameView.setText(user.getName()); // View操作在Controller中
}
}MVP 伪代码:
// Presenter
class UserPresenter {
private UserView view; // View接口
void loadUser() {
User user = UserRepository.getUser();
view.showUserName(user.getName()); // 通过接口回调
}
}
// View接口
interface UserView {
void showUserName(String name);
}MVVM 伪代码(使用Jetpack):
// ViewModel
class UserViewModel : ViewModel() {
val userName = MutableLiveData<String>()
fun loadUser() {
userName.value = UserRepository.getUser().name
}
}
// XML布局通过Data Binding绑定userName3. 最佳实践
- MVC:小型项目快速开发,避免在Activity中堆积过多逻辑
- MVP:需要单元测试时,Presenter可独立于Android框架测试
- MVVM:中大型项目,结合LiveData/DataBinding减少模板代码
4. 常见错误
- MVC中让Activity同时承担View和Controller职责(称为"Massive View Controller"问题)
- MVP中未使用接口导致View与Presenter强耦合
- MVVM中滥用数据绑定导致调试困难
5. 扩展知识
- 数据驱动UI:MVVM的核心思想,View状态随数据自动变化
- 单向数据流:推荐架构(如MVI),状态变化可预测
- 架构选择依据:
- 项目复杂度:简单用MVC/MVP,复杂用MVVM
- 测试需求:MVP最易单元测试
- 团队熟悉度:MVVM学习曲线较陡