代码越来越多的情况下,我们逐渐引入了各种设计模式来提高代码的复用性以及解耦,而框架则是更进一步,在整个项目上来分离模块,减少耦合

    目前Android开发上用的最多的是MVC,MVP,MVVM,下面就让我们来了解一下这三个框架的优点和差异

一、MVC

1,定义

    M(model):模型,业务逻辑的处理,数据的实体类和存取等

    V(view):视图,用于显示处理之后的数据,结果

    C(controller):控制器,让M,V数据进行交互

    在当前的android中,可以说默认就使用了MVC来进行开发,model好比我们的方法类,一些具体功能的实现类,而view就类似于我们对应的布局,例如那些xml文件。我们可以把Activity当做controller,它持有view,即控件们的对象,及一些model,即方法类的对象,并且让他们进行交互,相当于是他们之间的桥梁。

2,交互

android mvc框架搭建 android mvvm框架_MVVM

3,特点

    优点:model,view,controller各司其职,区分明确且易于理解

    缺点:由于xml能实现的功能有限,很多view层应该做的事情被迫让activity,也就是controller层来做,这就导致controller层逻辑复杂了起来,导致他们之间的分工不再那么明确,在android中,这就导致了activity类过于臃肿,并且view可以直接和model交互,这让原本应该是controler层负责的工作又模糊了起来

二、MVP

1,定义

    M(model):模型,业务逻辑的处理,数据的实体类和存取等

    V(view):视图,用于显示处理之后的数据,结果

Presenter):协调器(主持者),让M,V数据进行交互

    其实光看字面意思,MVP和MVC没有太本质的区别,C和P负责M,V之间的交互,但MVP和MVC相比,M,V之间是完全隔离开的,而MVC中,View还是可以和Model进行交互的,这点可以在两个交互图中看出

    由于android本身并没有按照MVP框架进行构建,所以一般我们会采取一些接口,回调的方式来实现MVP

2,交互

android mvc框架搭建 android mvvm框架_数据_02

3,特点

    优点:由于解除了view和model之间的联系,耦合性降低且职责更加明确清晰,并且相比于MVC,可扩展性会得到一定提升

    缺点:由于View到Model和Model到View都需要Presenter来实现,这使得Presenter也过于笨重,且由于Presenter双向都需要接口来隔离和调用,大量的接口也使得维护的复杂度上升

4,使用

    由于android本身不是MVP的设计,使用起来会需要灵活使用接口及回调

    这里以鸿洋大神的demo的结构来分析。该demo实现的是一个用户登录功能

    

android mvc框架搭建 android mvvm框架_数据_03

    Model:

  •     User:用户的实体类
  •     IUserBiz:用户账号操作的接口,内含用户登录(如果有需要肯定还需要加入用户注册等)的方法
  •     UserBiz:用户账号操作的实现类,实现IUserBiz接口并且实现登录方法
  •     OnLoginListener:定义一个监听器接口,内含成功失败两个方法,需要使用时实现具体的方法

    View:

  •     IUserLoginView:登录界面的视图的接口,定义诸如获取账号,获取密码,显示登录状态view,隐藏登录状态view,登录成功,登录失败,清除账号,清除密码等方法
  •     UserLoginActivity:实现IUserLoginView接口及它里面的具体方法,实现具体View层的工作,并且持有对应的Presenter对象,当然,它只负责给Presenter传递对应的信息,诸如登录,清除等等,具体功能由Presenter调用Model内方法来实现

    Presenter:

  •     UserLoginPresenter:用户登录的协调器,持有View层及Model层的引用,在View层,及UserLoginActivity发起请求后,通过持有的Model对象来实现具体的功能

三、MVVM

1,定义

    M(model):模型,业务逻辑的处理,数据的实体类和存取等

    V(view):视图,在android中对应activity和XML,其实类似MVP

ViewModel):视图模型,其实也可以说它是控制M和V之间的交互的

    其实可以说,MVC中的C,MVP中的P,MVVM中的VM,字面上看都只是个名称的区别,主要的区别还是在他们的交互方式和交互方法中

    在MVVM中的解耦,其实和MVP中类似,但是因为MVP中需要定义的接口太多,维护起来较为复杂,MVVP中就把MVP中P负责和V交互的内容给简单化了,让View直接和数据进行绑定,让xml不再只是一个简单的布局文件,让他也能够参与到数据的交互中去,数据变化的时候View可以自己去更新界面

2,交互

android mvc框架搭建 android mvvm框架_MVC_04

3,特点

    优点:跟MVP中的P相比,VM显得轻量化一些,由于有databind的存在,不需要去自己同步View和Model,所以MVVM相比MVP的类的数量也会少一些

ViewModel又有些难以构建和维护