Android开发

Android架构篇:mvc、mvp、mvvm浅谈

2020-11-26  本文已影响0人  10块钱new一个对象

MVC

在我们的开发中,通常是这样去描述MVC的

  1. Activity通过setContentLayout和findviewByid将视图与控制器绑定
  2. setOnclick等监听绑定了各类视图交互
  3. 当点击事件触发的时候,假设网络请求,那么点击按钮的时候,我们要model发送一个网络请求
  4. 所以Activity同时也要持有Model对象,当model请求返回了数据之后,通知view去更新,那么代码可以这样写
V
xml
<TextView...>

C
Activity{
    onCreate{
        //Model
        String data = Model.getData();
        //View
        tv.setText(data);
    }
}

M
Model{
    //直接返回用的比较少,一般都是接口回调,这里简化了
    static String getData(){
        retrun "MVC"
    }
}

MVC的流程

其实我认为MVC不应该把M、V、C拆开去看,其实可以看作就是就是++M++、++VC++两个部分更好理解一些

MVC的问题

其实MVC主要的问题就是C太过繁重,要负责的东西太多,既要负责询问Model,又要负责View的更新,不累么,累啊,太累了,而且代码多了看起来都头痛,这是即便你代码写的再工整都会觉得烦,对于后期维护来讲很不友好,而且代码是真的容易越写越乱,Activity中的代码太多了,所以MVP的出现其实是大大了解放了Activity

最后请记住把所有业务逻辑和界面更新操作都写进 Activity 的写法不叫 MVC。

MVP

MVP在MVC基础上,对Controller进行了拆分

Presenter

P
class Presenter{
    Model model;
    View view;
    // P 持有了View 和 Model
    Presenter(View v){
        model = new Model();
        view = v;
    }

    doPost(){
        String data = model.getData();
        view.showData(data);
    }

}

Model

M
Model{
    String getData(){
        retrun "MVP"
    }
}

View

V
xml
<TextView...>

Activity implements View{
    onCreate{
        //P
        Presenter p = new Presenter(this);
    }

    @override
    showData(String data){
        tv.setText(data);
    }
}

interface View{
    void showData(Obect data);
}

MVP的流程

还是以上面的注册流程为例

MVP与MVC的比较

通过上面的梳理,我们似乎发现MVP跟MVC特别像啊,甚至MVC中的代码反倒是精简很多,没错,是的,所以这也就是MVC和MVP根本没必要争论谁好谁坏的原因,那个适合,那个就是最好的

MVP的特点

MVVM

在前端开发中MVVM使用的特别普遍,其特性就是

类似react,vue等前端框架都帮我们实现了Model-View,View-Model的双向绑定,即这个过程是自动的,开发者按照开发规范去编写代码就可以了
但是在安卓开发中我们要手动去实现这个(虽然ViewModel+LiveData极大地帮我们简化了双向绑定的过程)

我理解的MVVM,其实就是一个加了数据的MVP/MVC

什么是数据绑定:

MVVM的实现

MVVM可以分成三个部分去解读,MODEL,VIEW,VIEW-MODEL

这样无论是视图和数据就实现了绑定,你变我也变,你不变我也不变

MVVM流程

依然以注册功能为例

MVVM 和 MVC、MVP 在定位上的区别

MVVM 和 Android Jetpack

和 MVVM 相关的 Jetpack 组件是 DataBinding,而不是 ViewModel

上一篇 下一篇

猜你喜欢

热点阅读