Android之MVC、MVP和MVVM

更新中。。。

一、MVC

1、是什么?特点

(1)Model:针对业务模型建立的数据结构和类(与View无关,只与业务相关)

(2)View:xml/JAVA或者JS+HTML的页面展示。

(3)Controller:Android的控制层在activity、fragment中,本质就是Controller操作Model层的数据,返回给View层展示。

2、缺点

(1)Activity并不是MVC中标准的Controller,既有Controller的职责也有View的职责,Activity代码过于臃肿。

(2)View层与Model层相互耦合,耦合过重,代码量过大,不易于开发和维护。

二、MVP

1、解释

(1)Model:主要提供数据存储功能

(2)View:负责处理点击事件和视图展示

(3)Presenter:View和Model之间的桥梁,从Model检索数据后返回给View层,M/V之间没有耦合关系。

2、特点

(1)Presenter完全把Model和View层解耦,主要业务逻辑在Presenter中

(2)Persenter和具体View没有直接关联,通过定义好的接口进行交互。

(3)View变更时,可以保持Presenter不变(符合面向对象编程的特点)

(4)View只应该有简单的Set/Get方法、用户输入、界面展示的内容,此外没有更多内容。

(5)低耦合:Model和View的解耦,决定了该特性。

3、优点

(1)低耦合,M/V的变换不会影响到对方

(2)可重用性:Model层可以用于多个View。比如请求影视数据,可能有多个页面都需要这个功能,但是Model层代码只要有一份就可以了。

(3)方便测试,可单独给Model层和View层进行测试

4、缺点

presenter的作用就是接受view的请求,然后再model中获取数据后调用view的方法进行展示,但是每个界面都是不同的,很少可以共用模块的情景出现。这就导致了每个Activity/Fragment都必须写一个IView接口,然后还需要再写个IPresenter接口,从而产生了非常多的接口,需要编写大量的代码来进行解耦。如果在小型的项目,这样反而会大大降低了开发效率。

(1)MVP的中使用了接口的方式去连接view层和presenter层,如果有一个逻辑很复杂的页面,接口会有很多,导致维护接口的成本非常大。

(2)解决办法:尽可能将一些通用的接口作为基类,其他的接口去继承。

三、MVVM

1、是什么?

(1)Model: 用于获取业务数据模型

(2)View: 定义了界面中的布局和外观

(3)ViewModel: 逻辑控制层,负责处理数据和处理View层中的业务逻辑

viewModel通过将数据和view进行绑定,修改数据会直接反映到view上,通过数据驱动型思想,彻底把MVP中的Presenter的UI操作逻辑给去掉了。而viewModel是绑定于单独的view的,也就不需要进行编写接口了。但viewModel中依旧有很多的业务逻辑,但是因为把view和数据进行绑定,这样可以让view和业务彻底的解耦了。view可以专注于UI操作,而viewModel可以专注于业务操作。

2、特点

(1)Model-View-ViewModel,将Presenter替换为ViewModel

(2)ViewModel和Model/View进行了双向绑定

(3)View发生改变时候,ViewModel会通知Model进行更新数据

(4)Model数据更新后,ViewModel会通知View更新显示

(5)MVVM支持Data Binding:能将数据绑定到xml中

(6)谷歌又推出了ViewModel和LiveData组件用于更方便的实现MVVM

四、MVC与MVP区别

(1)MVP不允许View直接访问Model

(2)本质上增加了一个接口降低一层耦合度

五、持续更新…

如有错误,欢迎指正!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值