Android中MVC、MVP与MVVM模式简介

**

Android中MVC、MVP与MVVM模式简介

**
一、 MVC模式
MVC(Model View Controller)是软件架构中最常见的一种框架,简单的来说就是通过controller的控制去操作model层的数据,并且返回给view层展示,三者的关系如下图。
Android中MVC、MVP与MVVM模式简介
图1 MVC模式
MVC工作原理:当用户触发事件的时候,view层会发送指令到controller层,接着controller去通知model层更新数据,model层更新完数据以后直接显示在view层上。
View层:视图层,对应于Android项目中的layout.xml的布局文件。
Model层:数据层,对应于Android项目中的各种bean,以及类似repository(数据仓库)的类。
Controller层:控制层,对应于Android项目中的各种activity。
问题:

  1. View层只包含了xml的静态布局文件,控制能力太弱,无法动态改变一个页面的背景或者动态隐藏/显示一个按钮;要做到动态的布局,只能将代码写在activity中,这样导致了Activity既是Controller层,又是View层。
  2. 图1中的MVC模式可以得知,View层和Model层是相互可知的,这意味着两层之间存在耦合。
    二、 MVP模式
    View层:视图层,包括xml布局文件,activity和fragment;使得可以动态的改变一个页面的背景或者动态隐藏/显示一个按钮,activit和fragment不再是Controller层,而是纯粹的View层。
    Model层:数据层,与MVC一样。
    Presenter层:数据处理层,所有关于用户事件的转发全部交由Presenter层处理,处理和用户交互的逻辑。
    Android中MVC、MVP与MVVM模式简介
    图2 MVP模式
    工作原理:MVP模式作为MVC模式的演化,其最明显的区别就是View层和Model层完全解耦,取而代之的是Presenter层充当桥梁的作用,用于操作View层发出的事件传递到Presenter层中,Presenter层去操作Model层,并返回数据给View层。
    解决MVC的问题:
    1 . View层和Model层完全解耦,Presenter层充当桥梁作用,而且View层和Presenter的通信是通过接口的方式,因此这两层并不会耦合。
    2 . MVC中的Activity由于既是Controller层,又是View层,带入了大量的逻辑代码,造成了Activity的臃肿。而MVP架构使得Activity是纯粹的View层,将大量的逻辑放到Presenter层,避免了Activity的臃肿。
    MVP架构优点:
    1 . View层和Model层完全解耦。
    2 . 更为高效的使用模式,所有交互都发生在Presenter层。
    3 . 一个Presenter可以用于多个视图,而不需要改变Presenter的逻辑。
    4 . 由于逻辑放在Presenter中,可以脱离用户接口来测试这些逻辑(单元测试)。
    三、 MVVM模式简要描述
    MVP中随着业务逻辑的增加,UI的改变多的情况下,会有非常多的跟UI相关的case,这样会造成View的接口会很庞大。
    MVVM(VM——View Model)通过双向绑定的机制,实现数据和UI内容只要改其中一方,另一方都能够及时更新的一种设计理念。
    Android中MVC、MVP与MVVM模式简介
    图3 MVVM模式
    明显的区别:View层和ViewModel层是相互绑定的关系,这意味着更新ViewModel层的数据的时候,View层会相应的变动UI。

参考CSDN博客:android中MVC、MVP和MVVM三种模式详解析