MVC、MVP和MVVM

MVC

1、简介

MVC全名是Model View Controller,用一种业务逻辑、数据、界面显示分离的分离的方法组织代码,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。如图所示。

mvc.png

其中,

Model:处理数据、业务逻辑等。

View:处理界面的显示结果。

Controller:起到桥梁的作用,来控制V和M层通信,达到分离视图显示和业务逻辑层。

2、在Android中

Model: 业务模型,建立的数据结构和相关的类。对数据库的操作、对网络等的操作都应该在Model里面处理。

View: 一般采用XML文件进行界面的描述。

Controller:通常由Activity承担。这句话也就暗含了不要在Activity中写逻辑代码,要通过Activity交割给Model业务逻辑层处理,这样做的另外一个原因是Android中的Actiivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。

3、优缺点

  • 优点

代码结构简单,所有通信是单向的。

  • 缺点

(1)xml作为view层,控制能力实在太弱了。你想去动态的改变一个页面的背景,或者动态的隐藏/显示一个按钮,这些都没办法在xml中做,只能把代码写在activity中,造成了activity既是controller层,又是view层的这样一个窘境。

(2)随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致变得庞大臃肿。

(3)view层和model层是相互可知的,这意味着两层之间存在耦合。

MVP

1、简介

MVP与MVC有一定的相似性:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。如图所示。

mvp.png

2、在Android中

Model: 负责存储、检索、操作数据, 可以实现一个Model interface用来降低耦合。

View: 负责绘制UI元素、与用户进行交互,体现为Activity、Fragment等。可以实现一个View interface来降低耦合,方便进行单元测试。

Presenter: 作为View与Model交互的中间纽带,处理与用户交互逻辑。

数据流方向:V -> P -> M -> P -> V

3、优缺点

  • 优点

(1)模型与视图完全分离,我们可以修改视图而不影响模型。

(2)可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部。

(3)一个Presenter用于多个视图,方便单元测试。

  • 缺点

(1)P层与V层是通过接口进行交互,接口粒度不好控制。粒度太小,就会存在大量接口的情况,使代码太过碎片化。粒度太大,解耦效果不好。

(2)MVP是以UI为驱动的模型,更新UI都需要保证能获取到控件的引用,同时更新UI的时候要考虑当前是否是UI线程,也要考虑Activity的生命周期

(3)复杂的业务同时也可能会导致P层太大,最终P层代码过于臃肿。

MVVM

1、简介

MVVM可以当作MVP的升级版,其中的VM是ViewModel的缩写,ViewModel可以理解成是View的数据模型和Presenter的合体,ViewModel和View之间的交互通过Data Binding完成,而Data Binding可以实现双向的交互,这就使得视图和控制层之间的耦合程度进一步降低,关注点分离更为彻底,同时减轻了Activity的压力。如图所示。

mvvm.png

2、在Android中

Model: 与MVP的Model类似,数据对象,提供数据操作的接口,同时在数据变化时发出变更通知。

View:与MVP的View类似,UI层,展示界面。

ViewModel:指View的Model,包含View的一些数据属性和操作,关键技术是数据绑定DataBinding, View的变化直接影响ViewModel, ViewModel的变化或者内容会直接体现在View上。

3、优缺点

  • 优点

(1)双向绑定技术,当Model变化时,View-Model会自动更新,View也会自动变化,很好做到数据的一致性。

  • 缺点

(1)数据绑定使得 Bug 很难被调试。你看到界面异常了,有可能是你 View 的代码有 Bug,也可能是 Model 的代码有问题。

(2)不利于代码重用。客户端开发最常用的重用是View,但是数据双向绑定技术,让你在一个View都绑定了一个model,不同模块的model都不同。

参考文章

Android App的设计架构:MVC, MVP, MVVM

Android App的设计架构:MVC,MVP,MVVM与架构经验谈

MVVM的优点和缺点

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容