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

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

Android中的MVC_第1张图片

流程为: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的方式,框架图这样表示更准确:
Android中的MVC_第2张图片

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

更多相关文章

  1. android——android中测试框架AndroidTestCase的使用
  2. Android Audio 框架简读
  3. 移动应用测试框架—Calabash Android 简介
  4. [入门]Android的应用程序框架
  5. [gitbook] Android框架分析系列之Android PackageManager
  6. Android 从零开始打造异步处理框架

随机推荐

  1. Kubernetes在智联招聘内网的应用场景
  2. 【ThinkPHP框架】tp的视图标签、request
  3. Nginx实现负载均衡
  4. flex项目上的三个属性
  5. Kubernetes在智联招聘内网的应用场景
  6. 认识负载均衡
  7. 0406作业
  8. js引用,常用数据类型,变量与常量,函数(高阶,箭
  9. Firefox logo仍包含小狐狸
  10. 接口和抽象类