Android框架演化

Android框架演化

MVC

MVC

模型(Model)——视图(View)——控制器(Controller)

View触发事件,并通知Controller执行业务逻辑。
Controller执行完业务逻辑后,通知Model更新数据。
Model完成数据更新后,通知View更新界面。

在传统的开发中Activity既充当了Controller又充当了View的作用。既需要接受用户响应操作Model,又要更新界面,十足的上帝类。
这么做的好处就是数据的更新变得很简单,适合于快速开发。但是缺点也十分明显,Activity非常臃肿,后期维护困难。

在实际运用中人们发现View和Model之间的依赖还是太强,希望他们可以绝对独立的存在,故逐渐的就演化出了MVP。

MVC允许View和Model直接进行交互

MVP

MVP

MVP不允许View和Model直接交互,Presenter替换了Controller。
通过Presenter将Model和View隔离开,并协调Model和View的协同工作,减少Model和View的依赖关系。
Presenter不仅仅处理逻辑部分,还控制着View的刷新,监听Model层的数据变化。

这样隔离掉View和Model的关系后使得View层变的非常的薄,没有任何逻辑部分,不主动监听数据。

优点

便于维护
View和Model之间的耦合度降低,结构清晰,维护方便。
可复用率提高
数据、逻辑和视图进行了分层,很容易进行重用
协同开发
可以共同开发,数据、逻辑和视图由不同开发者并行进行开发
局部开发
在已有数据接口,而设计稿没有完成的情况,可以先行开发Model层。
在已有设计稿,而数据接口仍未确定的情况下,可以先行开发view层。
方便单元测试
分层明确,对单元测试支持良好。
由于逻辑在Presenter中,可以不通过视图即可测试逻辑。

缺点

接口和类增多

MVVM

MVVM

MVVM模式基于MVP演化而来,最先使用在WPF中。
通过Data Binding,实现View和ViewModel的双向绑定。使View的变化可以自动反应在ViewModel上,ViewModel的数据变化也会自动反应到View上。

View的事件直接传递到ViewModel,ViewModel去对Model进行操作并接受更新,进而反馈到View上。

优点

拥有MVP的大部分的优点
同时,相对MVP编写的类和接口有所减少
数据的双向绑定使得UI的变化非常容易,UI的数据化也变得非常便捷

缺点

数据的双向绑定使得 Bug 很难被调试
你看到界面异常了,有可能是你 View 的代码有 Bug,也可能是 Model 的代码有问题。数据绑定使得一个位置的 Bug 被快速传递到别的位置,要定位原始出问题的地方就变得不那么容易。
对于过大的项目,数据绑定需要花费更多的内存
View和ViewModel的耦合较高
View和ViewModel的耦合较高,存在View的复用问题,因为去掉了Presenter,View层依旧过重。
对于一些特定的框架,不支持DataBindng
比如Small插件化和DataBinding冲突

MVPVM

MVPVM

MVPVM是MVP和MVVM的结合演化版本,降低了ViewModel与View的耦合,View只需要实现ViewModel的观察者接口(如Listener)实现更新.ViewModel不再对Model直接进行操作,而是交给了Presenter.Presenter操作Model并反馈到ViewModel上。

参考

Android MVP开发模式的结构及优缺点详解
Android架构MVC,MVP与MVVM及MVPVM对比分析
从零开始的Android新项目3 - MVPVM in Action, 谁告诉你MVP和MVVM是互斥的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氦客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值