Android UI层的三种框架模式-MVC、MVP、MVVM

MVC


MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。

调用关系


数据关系
  • View 接受用户交互请求
  • View 将请求转交给Controller
  • Controller 操作Model进行数据更新
  • 数据更新之后,Model通知View更新数据变化
  • View 更新变化数据
Android实现

对于原生的Android应用,MVC的角色分配如下:

View :layout里面的xml布局文件

Model:各种Java bean,一些类似repository类 等

Controller:各种Activity

缺点:

xml作为view层,控制能力实在太弱了,你想去动态的改变一个页面的背景,或者动态的隐藏/显示一个按钮,这些都没办法在xml中做,只能把代码写在activity中,造成了activity既是controller层,又是view层的这样一个窘境。如果是一个逻辑很复杂的页面,activity或者fragment动辄上千行呢?这样不仅写起来麻烦,维护起来更是噩梦。

MVC还有一个重要的缺陷,View层和Model层是相互可知的,这意味着两层之间存在耦合,耦合对于一个大型程序来说是非常致命的,因为这表示开发,测试,维护都需要花大量的精力。

正因为MVC有这样那样的缺点,所以才演化出了MVP和MVVM这两种框架。


MVP

MVP的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。
MVP作为MVC的演化,解决了MVC不少的缺点,对于Android 来说,MVP的Model 层相对于 MVC 是一样的,而 Activity 和Fragment 不再是 Controller 层,而是纯粹的 View 层,所有关于用户事件的转发全部交由 Presenter 层处理。下面还是让我们看图


从图中就可以看出,最明显的差别就是 View 层和 Model 层不再相互可知,完全的解耦,取而代之的 Presenter 层充当了桥梁的作用,用于操作 View 层发出的事件传递到 Presenter 层中, Presenter 层去操作 Model 层,并且将数据返回给 View 层,整个过程中 View 层和 Model 层完全没有联系。看到这里大家可能会问,虽然 View 层和 Model 层解耦了,但是 View 层和 Presenter 层不是耦合在一起了吗?其实不是的,对于 View 层和 Presenter 层的通信,我们是可以通过接口实现的,具体的意思就是说我们的Activity ,Fragment 可以去实现实现定义好的接口,而在对应的 Presenter 中通过接口调用方法。不仅如此,我们还可以编写测试用的View,模拟用户的各种操作,从而实现对Presenter的测试。这就解决了MVC模式中测试,维护难的问题。


当然,其实最好的方式是使用 Fragment 作为 View 层,而 Activity 则是用于创建 View 层( Fragment )和 Presenter 层(Presenter)的一个控制器。



MVVM

MVVM是Model-View-ViewModel的简写。最早是由微软提出的。


从图中看出,它和MVP的区别貌似不大,只不过是 Presenter 层换成了 ViewModel 层,还有一点就是 View 层和 ViewModel 层是相互绑定的关系,这意味着当你更新 ViewModel 层的数据的时候,View 层会相应的变动UI。


我们很难去说MVP和MVVM这两个MVC的变种孰优孰劣,还是要具体情况具体分析。


参考:http://blog.csdn.net/jdsjlzx/article/details/51174396

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值