一、前言
由于 MVP、MVVM 的兴起,MVC 在 android 中的应用变得越来越少了,但 MVC 是基础,理解好 MVC 才能更好的理解MVP,MVVM。因为后两种都是基于 MVC 发展而来的。
一、概论
MVC架构是第一个应用于Android开发的成熟架构,由Model、View、Controller三部分组成,大致的设计图有以下几种:
MVC架构
到底上面列出的设计图哪个才是对的。其实都是对的。为什么这么说呢,这得从 MVC 的发展说起。 MVC 框架模式最早由 Trygve Reenskaug 于 1978 年在 Smalltalk-80 系统上首次提出。经过了这么多年的发展,当然会演变出不同的版本,但核心没变依旧还是三层模型 Model-View-Control。
箭头 → 代表的是一种事件流向,并不一定要持有对方,比如上图中 model → view 的事件流向,view 可以通过注册监听器的形式得到 model 发来的事件。在设计中 model view controller 之间如果要通讯,尽量设计成不直接持有,这样方便复用。也符合mvc的设计初衷 在 Android 中三者对应的关系如下:
MVC关系-
视图层(View) 对应于xml布局文件和java代码动态view部分。
-
控制层(Controller) MVC中Android的控制层是由Activity来承担的,Activity本来主要是作为初始化页面,展示数据的操作,但是因为XML视图功能太弱,所以Activity既要负责视图的显示又要加入控制逻辑,承担的功能过多。
-
模型层(Model) 针对业务模型,建立的数据结构和相关的类,它主要负责网络请求,数据库处理,I/O的操作。
由于 Android 中有个 god object 的存在 activity,再加上 Android 中 xml 布局的功能性太弱,所以 activity承担了绝大部分的工作。所以在 Android 中 mvc 更像是这种形式:
因为 activity 扮演了 controller 和 view 的工作,所以 controller 和 view 不太好彻底解耦,但是在一定程度上我们还是可以解耦的。下面我们通过代码来看下,mvc 在 Android 中的实现:
前面说了 Activity 充当 View 和 Controller,但是我们依然要区分到底哪一部分是 View 的操作,哪一部分是 Controller 的操作。 我们分析下事件的流向。
- button 点击事件的触发:View→Controller
- 获取用户信息事件的触发:Controller→Model
- 绑定用户信息到View:Controller→View
至此MVC就讲完了,我们这里根据 sample 来总结下:
- 具有一定的分层,model 彻底解耦,controller 和 view 并没有解耦;
- 层与层之间的交互尽量使用回调或者去使用消息机制去完成,尽量避免直接持有;
- controller 和 view 在 android 中无法做到彻底分离,但在代码逻辑层面一定要分清;
- 业务逻辑被放置在 model层,能够更好的复用和修改增加业务。
优点:
由于MVC很好的分离了视图层和业务层,所以它具有以下优点
- 耦合性低
- 开发速度快
- 可维护性高
- 易于理解
缺点:
- 由于MVC的设计思想是从Model出发,而没有考虑到View端的复杂性,这样导致的问题是Model难以符合复杂多变的View端变化。导致Model的作用很小,而很多View层的职责也转移到了Controller层。Controller变得臃肿不堪。耦合性也变高了。
- 测试困难
网友评论