Android开发——MVVM模式

前言

Android开发——MVVM模式_第1张图片

最近听到许多人在谈论Android开发中的MVVM模式,相信大家对MVVM模式也有自己的见解,那我们今天就来深入了解一下

MVVM是Model-View-ViewModel的缩写,其根本上就是以MVC为根据的改进版本,MVVM本质上就是将其所在的View的状态和行为进行抽象化处理

MVVM框架是根据MVP模式与WPF所结合的应用方式所演变过来的一种新型架构框架,这个框架现在不仅拥有着原有MVP框架,同时也将WPF的新特性进行糅合了,以此来应对将来越来越复杂的项目需求,其最重要也是最关键的一点 就是能实现双向数据绑定

为何要做 MVVM ?

我们将MVVM分成三部分:

● M(Model,模型层 )

● V(View,视图层)

● VM(ViewModel,V与M连接的桥梁,也可以看作为控制器)

优势

● 低耦合:View可以独立于Model变化和修改,同一个ViewModel可以被多个View复用;并且可以做到View和Model的变化互不影响

● 可重用性:可以把一些视图的逻辑放在ViewModel,让多个View复用

● 独立开发:开发人员可以专注与业务逻辑和数据的开发

● 可测试性:清晰的View分层,使得针对表现层业务逻辑的测试更容易,更简单

难点

● 数据绑定使得 Bug 很难被调试。你看到界面异常了,有可能是你 View 的代码有 Bug,也可能是 Model 的代码有问题,数据绑定使得一个位置的 Bug 被快速传递到别的位置,要定位原始出问题的地方就变得不那么容易了

● 一个大的模块中,model也会很大,虽然使用方便了也很容易保证了数据的一致性,当时长期持有,不释放内存,就造成了花费更多的内存

● 数据双向绑定不利于代码重用。客户端开发最常用的重用是View,但是数据双向绑定技术,让你在一个View都绑定了一个model,不同模块的model都不同,那就不能简单重用View了
Android开发——MVVM模式_第2张图片

双向绑定

我们通常使用ViewModel + LiveData 进行双向绑定功能

首先我们通过 Activity/Fragment 进行观察 ViewModel 中的 LiveData 来对其更新界面

Repository 通过更新 ViewModel 中的 LiveData 来更新界面

接下来我们进行代码实现

TestActivity

import android.os.Bundle
import android.view.LayoutInflater
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import com.example.fragment.project.databinding.ActivityTestBinding
import com.example.fragment.project.model.TestViewModel

class TestActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val bind = ActivityTestBinding.inflate(LayoutInflater.from(this))
        setContentView(bind.root)

        // 使用“by viewModels()”Kotlin属性委托获取ViewModel
        val viewModel: TestViewModel by viewModels()

        bind.btn.setOnClickListener {
            //通过LiveData更新天气信息
            viewModel.updateWeather("阴天")
        }

        //通过观察LiveData来更新界面
        viewModel.weatherResult.observe(this) {
            bind.weather.text = it
        }

        //通过ViewModel获取天气信息
        viewModel.getWeather()
    }

}

activity_test.xml




    

    

TestViewModel

import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

class TestViewModel : ViewModel() {

    // 这边就不写Model直接更新数据

    val weatherResult = MutableLiveData()

    fun getWeather() {
        // 获取网络数据或本地数据库数据等
        weatherResult.postValue("晴天")
    }

    fun updateWeather(str: String) {
        // 更新网络数据或本地数据库数据等
        weatherResult.postValue(str)
    }

}

通过这些代码可以看出MVVM模式的功能

结语

以上就是本文中的全部内容

如果喜欢文章中的内容欢迎大家点赞和评论,你们的鼓励将是我前进的动力

有需要文章中的源码,或者想要了解更多关于Android开发相关的进阶资料

欢迎大家在评论区下发留言,或者私信我
Android开发——MVVM模式_第3张图片

你可能感兴趣的:(android开发,android工程师,移动开发,android,java,经验分享)