android mvc mvp,Android MVC MVP MVVM

MVC

Model(模型层)

数据保存,针对业务模型,建立的数据结构和相关的类,它主要负责网络请求,数据库处理,I/O的操作。

View

用户界面,对应于xml布局文件和java代码动态view部分

Controller(控制层)

业务逻辑。Controller接收View的操作事件,根据事件不同,或者调用Model的接口进行数据操作,或者进行View的跳转,从而也意味着一个Controller可以对应多个View。Controller对View的实现不太关心,只会被动地接收,Model的数据变更不通过Controller直接通知View,通常View采用观察者模式监听Model的变化。

MVC中Android的控制层是由Activity来承担的,Activity本来主要是作为初始化页面,展示数据的操作,但是因为XML视图功能太弱,所以Activity既要负责视图的显示又要加入控制逻辑,承担的功能过多。

0cca50134232

0cca50134232

箭头代表事件流向

View层通过Controller来进行指令的传达,通知Model进行数据的变化,而Model的变化有需要进行UI界面的修改,可以通过Controller进行更新。

由于android中有个god object的存在activity,再加上android中xml布局的功能性太弱,所以activity承担了绝大部分的工作。所以在android中mvc更像是这种形式:

0cca50134232

MVC总结

具有一定的分层,model彻底解耦,controller和view并没有解耦

层与层之间的交互尽量使用回调或者去使用消息机制去完成,尽量避免直接持有

controller和view在android中无法做到彻底分离,但在代码逻辑层面一定要分清

业务逻辑被放置在model层,能够更好的复用和修改增加业务.

MVP

在Android开发过程中,Activity和Fragment占据了大量的代码,虽然进行了模块的划分和接口隔离,但是也出现了很多的代码。1000+分分钟想砸电脑有木有啊😤其实也不能全怪activity啊哈哈哈,毕竟又要负责UI又要负责交互的说,一些业务逻辑也在里面所以变得臃肿。那么,就出现了MVP,将View和Controller进行分离.

0cca50134232

Model

View

Activity响应生命周期,其他工作转移至Presenter完成

Presenter

Model和View之间的桥梁。Presenter与Controller一样,接收View的命令,对Model进行操作;与Controller不同的是Presenter会反作用于View,Model的变更通知首先被Presenter获得,然后Presenter再去更新View。一个Presenter只对应于一个View。根据Presenter和View对逻辑代码分担的程度不同,这种模式又有两种情况:Passive View和Supervisor Controller。

MVP好处

代码变少

可读性提高

耦合性降低

避免内存泄露

方便进行单元测试

MVP缺点

由于对视图的渲染放在了Presenter中,所以视图和Presenter的交互会过于频繁。还有一点需要明白,如果Presenter过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么Presenter也需要变更了。

MVVM

0cca50134232

MVVM中跟MVP中一样,将三层划分的很清楚。

Activity和xml layout充当View,

ViewModel处理业务逻辑以及获取数据,弱化Model。

ViewModel

注意这里的“Model”指的是View的Model,跟MVVM中的一个Model不是一回事。所谓View的Model就是包含View的一些数据属性和操作的这么一个东东,这种模式的关键技术就是数据绑定(data binding),View的变化会直接影响ViewModel,ViewModel的变化或者内容也会直接体现在View上。这种模式实际上是框架替应用开发者做了一些工作,开发者只需要较少的代码就能实现比较复杂的交互。

MVVM与MVP区别

在MVP中View和presenter要相互持有,方便调用对方

在MVVM中 View和ViewModel通过Binding进行关联,他们之前的关联处理通过DataBinding完成

MVVM与DataBinding的关系

MVVM是一种思想,DataBinding是谷歌推出的方便实现MVVM的工具。

在google推出DataBinding之前,因为xml layout功能较弱,想实现MVVM非常困难。而DataBinding的出现可以让我们很方便的实现MVVM。

MVVM总结

看起来MVVM很好的解决了MVC和MVP的不足,但是由于数据和视图的双向绑定,导致出现问题时不太好定位来源,有可能数据问题导致,也有可能业务逻辑中对视图属性的修改导致。如果项目中打算用MVVM的话可以考虑使用官方的架构组件ViewModel、LiveData、DataBinding去实现MVVM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值