在 Android 开发的历史中,MVVM(Model-View-ViewModel)模式已经成为一种主流的架构选择,它提供了一种清晰的方法来组织代码,使得 UI、业务逻辑和数据层之间的交互更加清晰和灵活。本文将探讨 MVVM 模式的起源、发展以及在 Android 中的应用。

![]()
MVVM 模式的起源
MVVM 模式最早起源于微软的 WPF(Windows Presentation Foundation)和 Silverlight 框架,用于简化用户界面的开发。它通过引入 ViewModel 层,将业务逻辑从 UI 代码中分离出来,使得开发者可以专注于界面设计和数据操作,而不必担心背后的复杂逻辑。
![]()
Android 中的 MVVM 模式
在 Android 开发中,MVVM 模式的引入主要是为了解决传统 MVC(Model-View-Controller)模式中的问题,如视图和控制器之间的高度耦合,以及难以测试的业务逻辑。MVVM 通过 ViewModel 层,提供了一种更加灵活的方式来处理数据和 UI 的交互。
Android MVVM 的发展
-
早期实践:在 Android 开发早期,MVC 模式是主流,但随着应用复杂度的增加,MVC 模式的局限性开始显现。开发者开始探索新的架构模式,MVP(Model-View-Presenter)模式应运而生,它通过引入 Presenter 层来解耦视图和模型,但仍然需要手动处理数据绑定和 UI 更新。
-
MVVM 的引入:随着 Google 对 Jetpack 架构组件的推出,特别是 ViewModel 和 LiveData 的引入,MVVM 模式在 Android 开发中得到了广泛支持。ViewModel 帮助管理 UI 相关的数据,LiveData 则提供了一种观察数据变化的方式,使得 UI 能够自动响应数据的变化。
-
数据绑定:Data Binding Library 的推出进一步简化了 MVVM 的实现,它允许开发者在 XML 布局文件中直接绑定数据,减少了样板代码,并提高了开发效率。
MVVM 在 Android 中的优势:
- 分离关注点:UI 和业务逻辑分离,使得代码更容易理解和维护。
- 提高可测试性:ViewModel 可以在没有 View 的情况下进行单元测试。
- 提高可重用性:ViewModel 可以独立于 View 存在,可以被多个 View 重用。
- 数据变化响应:使用 LiveData 或 DataBinding 观察数据变化,自动更新 UI。
- 生命周期感知:ViewModel 感知 View 的生命周期,避免内存泄漏。
MVVM 在 Android 中的应用
在 Android 中,MVVM 模式通常与 Jetpack 架构组件一起使用,包括:
- ViewModel:负责管理界面相关的数据和逻辑,确保在配置更改(如屏幕旋转)时数据不会丢失。
- LiveData:一种可观察的数据持有者类,用于在数据变化时通知观察者,通常用于更新 UI。
- Data Binding:一个框架,允许绑定布局文件中的 UI 组件直接与数据源交互,减少了代码量。
- Repository:作为数据层的抽象,负责管理数据的获取和存储,通常与 ViewModel 交互。
![]()
MVVM 模式的三个主要组成部分:
-
Model(模型):
- 代表应用程序的数据和业务逻辑。
- 通常由数据类和仓库类(Repository)组成,用于从本地数据库或远程服务器获取数据。
-
View(视图):
- 指的是用户界面,例如 Activity 或 Fragment。
- 负责显示数据(来自 ViewModel)和传递用户交互(如点击事件)到 ViewModel。
-
ViewModel(视图模型):
- 作为 Model 和 View 之间的桥梁,负责处理与 UI 相关的数据和逻辑。
- 通常使用 LiveData 或 StateFlow 来观察数据变化,并更新 UI。
- ViewModel 不依赖于特定的 View,因此可以在配置更改(如屏幕旋转)时保持状态。
![]()
实现 MVVM 模式的步骤:
-
定义 Model:
- 创建数据类和仓库类,用于管理数据和业务逻辑。
-
创建 ViewModel:
- 使用
ViewModel类或其子类创建 ViewModel。 - 在 ViewModel 中定义与 UI 相关的数据和逻辑。
- 使用
-
绑定 View 和 ViewModel:
- 在 Activity 或 Fragment 中,使用
ViewModelProvider获取 ViewModel 实例。 - 使用 LiveData 或 DataBinding 将 ViewModel 中的数据绑定到 UI 组件。
- 在 Activity 或 Fragment 中,使用
-
处理用户交互:
- 在 View 中监听用户事件,如按钮点击,并将事件传递给 ViewModel 处理。
-
更新 UI:
- 当数据发生变化时,ViewModel 会更新 LiveData 中的数据,View 会自动响应这些变化并更新 UI。
示例代码:
public class MyViewModel extends ViewModel {
private LiveData<String> data;
public LiveData<String> getData() {
if (data == null) {
data = new MutableLiveData<>();
loadInitialData();
}
return data;
}
private void loadInitialData() {
// Load data from database or API
data.setValue("Initial data");
}
}
public class MyActivity extends AppCompatActivity {
private MyViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
viewModel = new ViewModelProvider(this).get(MyViewModel.class);
final TextView textView = findViewById(R.id.text_view);
viewModel.getData().observe(this, data -> {
// Update UI
textView.setText(data);
});
}
}
在上述示例中,MyViewModel 负责管理数据,MyActivity 则负责显示数据并更新 UI。当数据发生变化时,MyActivity 会自动更新显示的内容。
![]()
结语
MVVM 模式在 Android 开发中的应用,不仅提高了代码的可维护性和可测试性,还使得 UI 开发更加直观和高效。随着 Android 开发框架的不断发展,MVVM 模式将继续在构建高质量应用中发挥重要作用。如果你还没有尝试过 MVVM,那么现在是一个不错的开始时机。


📂 Unity 开发技能 | 目录索引
📂 Unity 常用插件 | 总目录
📂 Unity 开发资源 | 目录索引
📂 Unity 源码工程 | 总目录
🍉🍉🍉 如果觉得这篇文对你有帮助的话,请点个赞👍、收藏⭐️下吧,非常感谢! 💕💕💕
🥷🏻博主简介:20年软件开发经验,经历嵌入式驱动开发、Android开发、Unity游戏开发。积累收藏了大量游戏开发资源和素材,如有需要请联系我。
互3互推也请联系我…


2846

被折叠的 条评论
为什么被折叠?



