MVC、MVP和MVVM原理和比较

MVC模式原理

MVC,即Model-View-Controller,意味:模型、视图和控制器

  • Model
    • 程序需要操作的数据来源。通常是从数据库网络请求或者是Bean数据。
    • 负责提供数据
  • View
    • 程序用来展示内容的界面。通常是ActivityFragmentUI组件。
    • 负责展示数据
  • Controller
    • 程序中用于处理Model数据业务逻辑并将结果输送给View的中间层。
    • 负责处理业务逻辑
MVC模式流程.png

实际开发中Activity究竟算Controller还是View说不清楚。理论上ActivityUI组件负责展示内容,但很多项目中Activity处理了太多的业务逻辑操作。超过1000行代码太常见了。根据这种情况我将Activity放到Controller上。只是个人习惯而已!

优缺点

  • 优点
    • 耦合性低:视图层和业务层分离。
    • 重用性高:多个View能共享同一个Model
    • 部署快:责任分离,各司其职,职责清晰。
    • 可维护性高
  • 缺点
    • Controller角色比重太大。虽然担任控制器的职责,但现实开发中类似ActivityUI却做了很多View相关操作。VC分离不清。
    • 优点中的耦合性低是相对的,现实中MVC的耦合性确实不低!

MVP模式原理

知道了MVC的不足之处,MVP就是为了解决VC耦合这个问题,在MVC的基础上变种出来的框架。

M几乎没有变化,只是把VC抽出来变成了VP

MVP核心思想

MVPActivity中的UI逻辑抽象成View接口,把业务逻辑抽象成Presenter接口,Model类还是原来的Model

减轻了Activity的工作,因为大部分工作都丢到了Presenter那去了。自己只要管理好生命周期即可。

MVP模式.png

根据上图,代码所需的实现:

  • 创建IPresenter表示业务逻辑接口,由PresenterImpl实现
  • 创建IView接口表示UI逻辑实现,由ActivityFragmentUI组件实现
  • Activity关联PresenterImpl用于调用业务方法
  • PresenterImpl关联Activity用于调用UI方法
  • Model木有变化,还是原来的Model~♪(*)

优缺点

  • 优点
    • 结构清晰,比MVC要清晰多了
  • 缺点
    • 每个View都有个Presenter,多了也是个麻烦~

MVVM模式原理

MVVM模式利用了一个工具DataBinding实现了其中的VM。将数据和View绑定在一起,这样一来,数据发生改变,View即时更新

  • Model
    • Model还是原来的Model,负责提供实体模型。供VM使用。
  • View
    • ActivityFragment以及View组件,这一块只包含UI相关代码。不含有一点业务逻辑代码。
    • 这才是真正的View模块,View模块就应该只负责UI逻辑。
  • ViewModel
    • 只负责业务逻辑
    • Model提供的实体数据View中真正展示数据的UI组件通过DataBinding绑定在一起
    • 我们就不用像以前那样,等Bean改变后,get里面的属性值。然后获取UI组件的引用,将属性值设置到UI组件上。
    • VM绑定在一起,Model一改变,View自动实时更新
MVVM模式.png

优缺点

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

推荐阅读更多精彩内容