📜  Android中的MVVM(模型视图ViewModel)架构模式(1)

📅  最后修改于: 2023-12-03 15:13:22.587000             🧑  作者: Mango

Android中的MVVM(模型视图ViewModel)架构模式

什么是MVVM?

MVVM 模式是一种设计模式,它将应用程序分为三个主要组件:模型(Model)、视图(View)和视图模型(ViewModel)。数据绑定是 MVVM 的一个关键功能,它使视图自动更新,使用 MVVM 可以实现松耦合、高度可测试的应用程序。

  • Model:它是应用程序中的数据层。此层负责数据检索,转换和验证,在需要时更新数据。

  • View:这是应用程序的用户界面。此层是用户看到和与之交互的层。它负责将模型转换为用户可视化元素。

  • ViewModel:它是模型和视图之间的中介层。此层负责处理视图关心的数据,并在需要时更新视图。ViewModel 还负责将视图处理的数据转换为模型可用的格式。

为什么在Android中要使用MVVM?
  1. 易于维护:使用 MVVM 设计模式,使得应用程序的代码结构变得简单易于维护。

  2. 低耦合性:MVVM 模式低耦合,模型,视图和视图模型之间的交互只通过数据绑定而不是依赖直接修补,从而在代码开发和测试期间极大提高了开发人员的开发效率。

  3. 可测试性:MVVM 设计模式使应用程序的各层之间相对独立,这使得每个层次都可以几乎独立地测试。

MVVM 的优点
  1. 适合复杂的应用程序开发:MVVM 模式使复杂的应用程序的开发过程变得更加容易。

  2. 提高了代码的可读性和可维护性:MVVM 模式具有松耦合和可测试性的特点,它将代码划分为更小的功能单元,从而使得代码更加清晰易于维护。

  3. 提高了应用程序的安全性:视图数据与后端数据完全分离,这能够保证应用程序的数据安全性。

MVVM 的缺点
  1. 学习曲线较陡峭:MVVM 相对于传统的 M ​​设计模式,需要一些时间来学习。但是,一旦学会了 MVVM,就能够使得代码更快、高效地开发出来,并且更容易维护。

  2. 代码变得更加抽象:MVVM 模式会导致代码抽象化程度的增加,使它们更加难以读懂和解释。

MVVM 的使用

下面是 MVVM 在 Android 中的一些使用:

  • Data Binding

通过Data Binding,我们可以将数据绑定到视图上,这样我们就无需使用 findViewById 之类的方法。示例如下:

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable name="model" type="com.example.app.MyViewModel" />
    </data>
    <LinearLayout> 
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{model.title}" />
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@{model.content}" />
    </LinearLayout>
</layout>
class MyViewModel {
    public final ObservableField<String> title = new ObservableField<>();
    public final ObservableField<String> content = new ObservableField<>();
}
  • LiveData

LiveData是一个可感知生命周期的数据持有器,在数据更新时可以自动通知到观察者,更加安全和方便。示例如下:

class MyViewModel extends ViewModel {
    private MutableLiveData<String> mName = new MutableLiveData<>();

    public void setName(String name) {
        mName.setValue(name);
    }

    public LiveData<String> getName() {
        return mName;
    }
}

class MyActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        MyViewModel viewModel = ViewModelProviders.of(this).get(MyViewModel.class);

        TextView nameTextView = findViewById(R.id.nameTextView);

        viewModel.getName().observe(this, name -> {
            nameTextView.setText(name);
        });

        Button changeNameButton = findViewById(R.id.changeNameButton);
        changeNameButton.setOnClickListener(v -> {
            viewModel.setName("New Name");
        });
    }
}
总结

Android 开发中,MVVM 模式使得应用程序代码的开发和维护更加容易,适用于需要处理复杂数据的应用程序。它还提高了可读性、可维护性和应用程序安全性,因此在开发中应该尽可能多地使用该模式。