文章参考来源1
文章参考来源2
文章参考来源3
MVC
Model 数据来源,管理业务数据逻辑,读取数据等
View 视图
Controller 单例模式,处理业务逻辑,负责改变Model和View
经典的MVC架构是 用户点击View,View将用户输入转发给Controller,Controller处理业务逻辑完后让Model处理对应的数据逻辑,Model更改完数据后让View来展示
而Android版本的MVC,View为xml,Activity和Fragment则是充当了Controller,对View和Controller都产生了耦合
Android 要想实现标准的MVC应该这样
定义一个数据类,作为业务数据
定义一个Activity,作为View,并监视组件,转发用户输入,适时调用Controller的方法
定义一个Controller,提供业务逻辑处理,提供一个接口给Model用于更新View
定义一个Model,处理数据逻辑,并回调接口,更新View
View与Controller是相互持有,因为View需要持有Controller才可以调用其方法,
而Controller必须持有View才可以改变它,Model没有持有View的必要。
优点:文件少,适合小项目
缺点:项目负责时,文件体积大、View和Controller的耦合度高
MVP
Model 数据来源
View 视图
Presenter 隔离联系人 View触发事件时调用Presenter方法,由presenter完成逻辑后改变Model和View
Android版本MVP 与MVC不同在于,MVC的Model更改完数据后,view会观察model变化而进行改变,而MVP则是Model必须通过presenter来更新View
提供两组接口A、B,
A用于更改View和监听View输入事件,Presenter接收该组接口的实例,用于回调更改View
B用于Model更新后回调Presenter的方法,间接更改View
View需要更改数据时也会调用Presenter提供的接口来调用Model
View和Model禁止直接通信(与MVC的区别)
Presenter通常面向界面与界面成一对一的关系,而Controller通常面向业务,服务于一个业务下的所有界面。
优点是职责清晰,接藕。
缺点是接口多,文件多,代码多。
MVVM
ViewModel:负责保存数据,处理逻辑和改动数据
View:展示数据、监听ViewModel的数据来改变自己,事件触发后直接调用ViewModel,由ViewModel处理逻辑
Model:接口返回数据的数据模型和本地存储数据模型
ViewModel不持有View,而Presenter持有View
MVVM为数据驱动,MVP为事件驱动
优点:逻辑清晰,代码文件少
缺点:数据绑定增加了bug,复杂页面时model会很大,长期持有影响释放内存