Android中MVC、MVP、MVVM详解

背景

今天有时间就刚好有想写关于这几个名词,对于我来说,其实这么多名词、思想归根到底就是要根据项目实际、人员配置来做合理优化,既不能纸上谈兵、又不能畏惧不前,那么合理分阶段架构和完善代码才是关键,本篇文章将以两个思路讲述,第一先说介绍,然后再说优缺点,结合实际开发。

MVC

一、MVC介绍

MVC (Model-View-Controller):M是指逻辑模型,V是指视图模型,C则是控制器。一个逻辑模型可以对于多种视图
模型,比如一批统计数据你可以分别用柱状图、饼图来表示。一种视图模型也可以对于多种逻辑模型。使用MVC的
目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式,而C存在的目的则是确保M和V的同步,
一旦M改变,V应该同步更新。

二、Android中MVC使用

1.视图层(View):一般采用XML文件进行界面的描述,使用的时候可以非常方便的引入。当然,如何你对Android了解的比较的多了话,
就一定可以想到在Android中也可以使用JavaScript+HTML等的方式作为View层,当然这里需要进行Java和JavaScript之间的通信,幸运的是,
Android提供了它们之间非常方便的通信实现。

2.控制层(Controller):本层应该是跟业务最挂钩的一层,是用户能操作的入口,在android中只有activity,ios中有Controller,
在这边activity中要做的就是业务导向,具体实现模块功能可以封装到model层,长时间操作如下载、上传、等都可以放线程或者服务等。

3.模型层(Model):对数据库的操作、对网络等的操作都应该在Model里面处理,当然对业务计算等操作也是必须放在的该层的。

还有数据模型都可以放在本层。

三、MVC优点

从用户的角度出发,用户可以根据自己的需求,选择自己合适的浏览数据的方式。比如说,对于一篇在线文档,
用户可以选择以HTML网页的方式阅读,也可以选择以pdf的方式阅读。从开发者的角度,MVC把应用程序的
逻辑层与界面是完全分开的,最大的好处是:界面设计人员可以直接参与到界面开发,程序员就可以把精力放
在逻辑层上。而不是像以前那样,设计人员把所有的材料交给开发人员,由开发人员来实现界面。在Eclipes工
具中开发Android采用了更加简单的方法,设计人员在DroidDraw中设计界面,以XML方式保存,
在Eclipes中直接打开就可以看到设计人员设计的界面。

MVP

一、MVP介绍

MVP作为MVC的演化版本,那么类似的MVP所对应的意义:M-Model-模型、V-View-视图、P-Presenter-表示器。
从MVC和MVP两者结合来看,Controlller/Presenter在MVC/MVP中都起着逻辑控制处理的角色,起着控制各业务
流程的作用。而
MVP与MVC最不同的一点是M与V是不直接关联的也是就Model与View不存在直接关系,这两者之
间间隔着的是Presenter层,其负责调控 View与Model之间的间接交互,MVP的结构图如下所示,对于这个图理解
即可而不必限于其中的条条框框,毕竟在不同的场景下多少会有些出入的。在
Android中很重要的一点就是对UI的
操作基本上需要异步进行也就是在MainThread中才能操作UI,所以对View与Model的切断分离是合理的。此外
Presenter与View、Model的交互使用接口定义交互操作可以进一步达到松耦合也可以通过接口更加方便地进行
单元测试。

Android中MVC、MVP、MVVM详解_第1张图片
20160322154604839.png

二、MVP优点缺点

优点:

Presenter这一层处理着程序各种逻辑的分发,收到View层UI上的反馈命令、定时命令、系统命令等指令后分发处理
逻辑交由Model层做具体的业务操作,在这里可以看到本身activity要做的事情被抽离出来,减少activity与view的业务
耦合,这样有利于维护、易开发,减少降低activity中代码和业务抽离模块化。

缺点:

mvp架构会抽离一层、这一层是业务分发,如果项目越来越大、人越来越多,如果业务非常多,并且易修改的话,抽
离的一层会变的易读性降低,还有开发团队如果不能坚持,要重新架构,基本要重新写一遍,所以要慎重慎重。

MVVM

一、MVVM介绍

MVVM首先是基于mvc演变而来的,说到这里那么MVVM代表啥里。MVVM模式包含了三个部分:Model – 代表你的
基本业务逻辑,View – 显示内容,ViewModel – 将前面两者联系在一起的对象。一个ViewModel接口提供了两个东西:
动作和数据。动作改变Model的下层(click listener,监听文字改变的listener等等),而数据则是Model的内容,代表
第三方库:RoboBinding等,github:https://github.com/RoboBinding/AndroidMVVM.

Android中MVC、MVP、MVVM详解_第2张图片
20160322154321258.jpeg

二、MVVM优缺点

优点:

ViewModel大致上就是MVP的Presenter和MVC的Controller了,而View和ViewModel间没有了MVP的界面接口,而是直接
交互,用数据“绑定”的形式让数据更新的事件不需要开发人员手动去编写特殊用例,而是自动地双向同步。数据绑定你可以
认为是Observer模式或者是Publish/Subscribe模式,原理都是为了用一种统一的集中的方式实现频繁需要被实现的数据更新
问题。比起MVP,MVVM不仅简化了业务与界面的依赖关系,还优化了数据频繁更新的解决方案,甚至可以说提供了一种有
效的解决模式。

缺点:

MVVM是数据模型绑定视图方式,减少代码、减少了数据更新,但如果是负责业务逻辑或者是高频发业务修改,对于代码理
解会有所降低,并且要使用第三方架构,这个是我最不喜欢的一点。

你可能感兴趣的:(Android中MVC、MVP、MVVM详解)