MVC、MVP、MVVM简介;Android应该如何使用MVVM

背景

目前,android流行的MVC、MVP模式的开发框架很多,然而一款基于MVVM模式开发的项目并不多。我们从当前的技术现状出发,分析下如何使用MVVM。

Android框架的发展史

一、MVC模式
在这里插入图片描述
1、简介
MVC(Model View Controller)一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。
2、各层职责
Model是应用程序中用于处理应用程序数据请求的部分。
  负责在数据库、网络中存取数据。并通知View结果。
View是应用程序中处理数据显示的部分。
Controller是应用程序中处理用户交互的部分。
  负责从视图获取数据、用户操作,内部处理业务逻辑,并向Model发送数据请求。
3、优缺点
MVC模式的需求能解决频繁的业务逻辑变更,该模型在业务逻辑变更时只需要变动Controller即可。但是针对Android应用程序来讲,Model跟View的耦合一方面导致Mode的复用能力弱,另一方面也Model和View需要协同处理线程切换问题。
二、MVP模式
在这里插入图片描述
1、简介
MVP(Model-View-Presenter)是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。
2、优缺点
MVP与MVC有着一个重大的区别:在MVP中View跟Model毫无关联,它们之间的通信是通过Presenter来进行的,所有的交互都发生在Presenter内部,实现了Model和View真正的完全分离。目前这个模式大部分Android程序都在使用。
三、MVVM模式
在这里插入图片描述
1、简介
MVVM(Model-View-ViewModel)ViewModel负责逻辑的处理并且向View提供数据,Model提供数据获取,View负责显示。
2、优缺点
根据流程图可以发现其实ViewModel就是Presenter。但是为什么称之为MVVM呢?个人认为MVVM是集成了数据绑定框架的MVP。在Android项目中,MVVM基于新技术能有效的解决内存泄漏,空指针等问题。

MVVM的简单使用

public class MyViewModel extends ViewModel {
    private MutableLiveData<List<User>> users;
    public LiveData<List<User>> getUsers() {
        if (users == null) {
            users = new MutableLiveData<List<User>>();
            loadUsers();
        }
        return users;
    }

    private void loadUsers() {
        // Do an asynchronous operation to fetch users.
        new Thread(new Runnable() {
            @Override
            public void run() {
                users.postValue(new Model().loadUsers());
            }
        }).start();
    }
}
public class MyActivity extends AppCompatActivity {
    public void onCreate(Bundle savedInstanceState) {
        // Create a ViewModel the first time the system calls an activity's onCreate() method.
        // Re-created activities receive the same MyViewModel instance created by the first activity.

        MyViewModel model = new ViewModelProvider(this).get(MyViewModel.class);
        model.getUsers().observe(this, users -> {
            // update UI
        });
    }
}

不需要写接口回调或者实现接口!不需要处理线程切换!不需要处理生命周期取消回调!不会引发内存泄露!
谷歌提供的MVVM框架基础集成了Lifecycle、LiveData、ViewModel,有兴趣的可以看相关文章:
LiveData原理及使用
lifecycle原理及使用
ViewModel原理及使用

谷歌官方还提供了有助于layout和Activity或者Fragment绑定的databinding,摒弃findviewById的使用,避免layoutId导致的空指针:
DatBinding原理及使用

基于MVVM,应该怎么合理的使用现有的各种工具

首先,我们先汇总下一个Android应用,都会有哪几类需要处理的点(这里纯属个人理解):
1、异步任务
现在比较少使用AsyncTask,Handler跟Activity耦合过于严重,推荐使用Rxjava或者Executors。因为LiveData的使用是的异步任务可以专心做异步操作,不需要关心线程调度,所以搞个适合自己项目的线程池足够了。
2、主子线程切换
比较常用的Handler,rxJava等,都可以摒弃,LiveData一步到位,还没有内存泄露。
3、生命周期管理
基于MVP模式的应用,大部分自己封装了Activity和Presenter的生命周期关联,或者当数据回调到主线程时使用各种判断,很麻烦,一不小心就漏掉了。Lifecycle很香,一步到位。
3、网络请求框架
这里不用由于,基于Okhttp的网络框架,放心使用。Volley,UrlConnection等,除非特殊需求,不建议使用。
4、进程间通信
常用的AIDL方式,但是这个方式的弊端就是需要aidl文件共享。这里可以试ContentProvider.call()方法,call方法内部你可以请求数据库,请求网络,很easy。
5、扩展UI处理
Databinding

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MVCMVPMVVM 是三种设计模式,用于在 Android 应用程序中组织代码。 MVC(模型-视图-控制器):模型存储应用程序数据,视图显示数据,控制器处理用户交互。 MVP(模型-视图-presenter):与 MVC 类似,但 presenter 更加紧密地与视图绑定,负责更新视图。 MVVM(模型-视图-视图模型):与 MVP 类似,但视图模型与视图绑定,负责将数据转换为视图可用的形式。 三者的差异在于MVC会产生视图和模型之间的耦合,MVPMVVM是将视图和模型之间的耦合分离,更加灵活。 ### 回答2: Android开发中,MVCMVPMVVM都是常见的架构模式,用来组织Android应用的代码结构,让代码更加规范、易于维护。 MVC(Model-View-Controller)是最早的一种架构模式,它将应用分为三个模块:模型(Model)、视图(View)和控制器(Controller)。其中模型负责数据的存储和操作,视图负责显示界面,控制器则负责对用户输入进行响应,协调模型和视图之间的关系。MVC模式的优点是结构清晰,各个模块职责分明,易于实现代码复用,因此广泛应用。但是MVC模式也有一些缺点,比如控制器中很难进行单元测试,代码复杂度较高,难以维护大型项目等问题。 MVP(Model-View-Presenter)是一种基于MVC模式的改进,它将模型和视图分离,通过在中间加上Presenter来连接两者。Presenter接受用户的输入,并根据视图的状态更新数据模型,然后更新视图显示。MVP模式的优点是易于单元测试,将业务逻辑和界面分离,代码复杂度较低,易于维护。但是对于大型项目,Presenter层也会变得庞大且复杂。 MVVM(Model-View-ViewModel)是一种结合数据绑定和命令模式的前端设计模式,它将模型、视图和ViewModel分开,通过数据绑定将视图和ViewModel联系起来。ViewModel封装了视图的状态和行为,当ViewModel被修改时,视图会自动更新。MVVM模式的优点是将视图和ViewModel解耦,通过数据绑定自动更新视图,提高了代码的可重用性。但MVVM模式需要使用大量的数据绑定,可能导致系统卡顿,同时实现较为复杂。 总的来说,MVCMVPMVVM这三种模式都有各自的适用场景。在小型项目中,可以使用MVC模式;在中型项目中,可以使用MVP模式;在大型项目中,可以使用MVVM模式。选择合适的架构模式能够让代码更易于维护,提高开发效率。 ### 回答3: Android是一种以Java为基础的开源操作系统,广泛应用于移动设备中。在开发Android应用程序时,常用的三种架构模式是MVCMVPMVVMMVC是一种典型的应用程序架构模式,其中M代表模型,V代表视图,C代表控制器。在Android中,MVC通常用规定ViewController或Activity来实现。 MVP是Model-View-Presenter的缩写,其中M代表模型,V代表视图,P代表演示者。MVP将视图项分离,并引入中间者Presenter,以实现界面和业务逻辑分离的目的。在Android中,MVP通常实现在Activity或Fragment上。 MVVM是Model-View-ViewModel的缩写,其中M代表模型,V代表视图,VM代表视图模型。ViewModel担任中间件角色,处理视图中的数据,并使控制逻辑与视图分离开。在Android中,MVVM通常实现了Data Binding。 总的来说,三种架构模式都旨在将应用程序分离成各个组成部分,每个部分具有各自分离的职责,在开发Android应用程序时选择合适的架构模式,能够提高开发效率、提高代码质量、降低维护成本、提高整个应用程序的可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值