Android中的MVC

猿生三年有余。最初争渡在Web后台、前端(企业号),后入坑Android。最近看到一些Android书籍和网上大家对Android中MVC的理解,有些地方不以为然。这里记下自己的理解。

MVC目的是将数据模型和视图分离。
之前搞Web,对MVC的理解是:
M:数据访问以及持久化
V:UI
C:路由

typical MVC

流程为:V->C->M->C->V。怎么样,是不是和MVP看起来一个样?

在Android中,一种简单的使用MVC的方式是这样定义各层:
M:数据层(本地或者网络获取的数据)
V:layout的布局文件
C:Activity、Fragment
这时候,其实Model和View就已经没有耦合了。完全符合上面典型的MVC框架图。甚至这时候,你把C当做P,就是和MVP一个样。框架不是死的,看你怎么用了。而这么分层的缺点也很明显,不方便测试,一个业务稍微复杂点的功能,对应的Activity可能动辄上千行,业务逻辑代码和表现逻辑杂糅严重,就像js在controller里面一样,难以维护。
而根本原因在于,分层的不合适。代表V的layout资源功能非常有限,并不能解决表现逻辑,还需要Activity的辅助,所以Activity最好也要代表V;同时,Activity一方面拥有生命周期回调,另外一方面还为View设置监听,控制交互以及路由,所以Activity也需要表示C。此时,Activity更好的定位,其实是同时代表着V与C。那么回头来看,这种实现MVC的方式,框架图这样表示更准确:
这里写图片描述

穷则思变。这时候,把MVC中的Controller抽象出去作为单独一层,就和MVP模式异曲同工了。而本质上,MVP也好,MVVM也好,听起来很复杂,但它们本质上就是一个精心优化的MVC。可以不负责任的说,其实都是MVC模式,你称为P也好VM也好,它都只是C的实例而已,就看你怎么精心设计这个C。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值