Android中的MVC/MVP/MVVM框架

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

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

一、MVC

1,定义

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

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

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

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

2,交互


3,特点

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

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

二、MVP

1,定义

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

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

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

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

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

2,交互


3,特点

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

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

4,使用

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

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

    

    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

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

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

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

2,交互


3,特点

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

    缺点:由于元素定义在xml中,View关于绑定的这部分内容是没办法打断点进行测试的,且对于小的界面,代码量过于庞大,对于复杂的界面,ViewModel又有些难以构建和维护


参考:

浅谈 MVP in Android

全面介绍Android的MVVM框架 - 数据绑定

界面之下:还原真实的 MVC、MVP、MVVM 模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值