更新中。。。
一、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)本质上增加了一个接口降低一层耦合度
五、持续更新…
如有错误,欢迎指正!!!