参考文章1:blog.csdn.net/chun_long/a…

参考文章2:blog.csdn.net/napolunyish…

(1)MVC框架:

  • M-Model : 业务逻辑和实体模型(biz/bean)
  • V-View : 布局文件(XML)
  • C-Controller : 控制器(Activity)

过程:控制器(C)控制页面路由和一些页面交互,传给模型(M),模型再传给布局(V)显示页面,如果页面发生交互,页面传给控制器(C)。

缺点:很多交互逻辑在C在处理,导致项目中C的代码臃肿。

(2)MVP框架:

  • M-Model : 业务逻辑和实体模型(biz/bean)
  • V-View : 布局文件(XML)和Activity
  • P-Presenter : 完成View和Model的交互

过程:MVP框架相对于MVC框架做了较大的改变,将Activity当做View使用,代替MVC框架中的C的是P,对比MVC和MVP的模型图可以发现变化最大的是View层和Model层不在直接通信,所有交互的工作都交由Presenter层来解决。既然两者都通过Presenter来通信,为了复用和可拓展性,MVP框架基于接口设计。

缺点:

  1. 接口过多,一定程度影响了编码效率。
  2. 业务逻辑抽象到Presenter中,较为复杂的界面Activity代码量依然会很多。
  3. 导致Presenter的代码量过大。

(3)MVC框架:

过程:MVP框架相对于MVC框架做了较大的改变,将Activity当做View使用,代替MVC框架中的C的是P,对比MVC和MVP的模型图可以发现变化最大的是View层和Model层不在直接通信,所有交互的工作都交由Presenter层来解决。既然两者都通过Presenter来通信,为了复用和可拓展性,MVP框架基于接口设计。

优点:

1. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多View重用这段视图逻辑。

2. 低耦合。

(4)共同点和区别

共同点:

  1. Model就是领域模型,数据对象,同时,提供外部对应用程序数据的操作的接口,也可能在数据变化时发出变更通知。Model不依赖于View的实现,只要外部程序调用Model的接口就能够实现对数据的增删改查。
  2. View就是UI层,提供对最终用户的交互操作功能,包括UI展现代码及一些相关的界面逻辑代码。

区别:

三者的差异在于如何粘合View和Model,实现用户的交互操作以及变更通知。

  1. Controller接收View的操作事件,根据事件不同,或者调用Model的接口进行数据操作,或者进行View的跳转,从而也意味着一个Controller可以对应多个View。Controller对View的实现不太关心,只会被动地接收,Model的数据变更不通过Controller直接通知View,通常View采用观察者模式监听Model的变化。
  2. Presenter,与Controller一样,接收View的命令,对Model进行操作;与Controller不同的是Presenter会反作用于View,Model的变更通知首先被Presenter获得,然后Presenter再去更新View。一个Presenter只对应于一个View。根据Presenter和View对逻辑代码分担的程度不同,这种模式又有两种情况:Passive View和Supervisor Controller。
  3. ViewModel,注意这里的“Model”指的是View的Model,跟上面那个Model不是一回事。所谓View的Model就是包含View的一些数据属性和操作的这么一个东东,这种模式的关键技术就是数据绑定(data binding),View的变化会直接影响ViewModel,ViewModel的变化或者内容也会直接体现在View上。这种模式实际上是框架替应用开发者做了一些工作,开发者只需要较少的代码就能实现比较复杂的交互。

总结:

MVP和MVVM完全隔离了Model和View,但是在有些情况下,数据从Model到ViewModel或者Presenter的拷贝开销很大,可能也会结合MVC的方式。

转载于:https://juejin.im/post/5aead36c5188256717762538

关于mvc、mvp和mvvm的理解相关推荐

  1. [Vue][面试]谈谈你对MVC、MVP和MVVM的理解

    谈谈你对MVC.MVP和MVVM的理解 答题思路:此题涉及知识点很多,很难说清楚,说透彻,因为MVC,MVP这些我们前端程序员自己甚至都没用过.但是恰恰反映了前端这些年从无到有, 从有到优的变迁过程, ...

  2. MVC, MVP 与 MVVM

    前几天读了阮一峰老师的文章<MVC,MVP 和 MVVM 的图示>,觉得讲得十分清晰,所以在这里做一波复习和总结. MVC, MVP 与 MVVM 是三种常见的软件架构,它们之间的特点与区 ...

  3. 对MVC、MVP、MVVM的理解

    最近看了一堆js框架的文档,有点乱,想分门别类整理一下,但是首先需要搞清楚这些框架里面经常谈论的MV*之类的概念.MVC的概念很早就知道,现在发现还有MVP.MVVM,那么这些设计模式有什么区别呢?谈 ...

  4. MVC,MVP与MVVM

    一.MVC是什么 1.MVC概念 MVC(Model View Controller),模型(model)-视图(view)-控制器(controller),软件框架的一种. (1)最上层view视图 ...

  5. android设计架构之MVC、MVP、MVVM的理解

    引用网上的一张图来阐述Model-View-Controller,Model-View-Presenter,Model-View-ViewModel; Model-View-Controller:是我 ...

  6. MVC, MVP, MVVM比较以及区别(下)

    上一篇得到大家的关注,非常感谢.一些朋友评论中,希望快点出下一篇.由于自己对于这些模式的理解也是有限,所以这一篇来得迟了一些.对于这些模式的比较,是结合自己的理解,一些地方不一定准确,但是只有亮出自己 ...

  7. vue学习-v-if v-for优先级、data、key、diff算法、vue组件化、vue设计原则、组件模板只有一个根元素、MVC.MVP,MVVM

    1:v-if和v-for哪个优先级更高?如果两个同时出现,应该怎么优化得到更好的性能? //在vue页面中 同时使用v-for与v-if后,打印渲染函数. console.log(app.$optio ...

  8. android MVC,MVP,MVVM

    1.MVC思想 无论在任何情况下,软件设计都要符合高内聚,低耦合的思想.如果背离这一原则,代码将很难进入维护. MVC出现与上世纪70年代,在三十多年的工程实践中,MVC充分证明了它的成功.在软件开发 ...

  9. android MVC,MVP,MVVM概论

    1.MVC思想 无论在任何情况下,软件设计都要符合高内聚,低耦合的思想.如果背离这一原则,代码将很难进入维护. MVC出现与上世纪70年代,在三十多年的工程实践中,MVC充分证明了它的成功.在软件开发 ...

最新文章

  1. java dump分析工具_java性能分析与常用工具
  2. Leetcode 剑指 Offer 11. 旋转数组的最小数字 (每日一题 20210916)
  3. linux内核高分辨率定时器,64位Linux上的高分辨率定时器支持
  4. boost::range模块replaced相关的测试程序
  5. ClickHouse 在广告系统场景中的实践
  6. 用计算机才能奏乐曲,计算机音乐系统和音乐听觉训练
  7. service层拼接XML
  8. ubuntu中获取文件名称并生成txt文件
  9. 微信支付 签名算法 sign node实现
  10. jmeter压测前清理内存
  11. 修改手机屏幕刷新率_240Hz 超高刷新率,这手机屏幕比电竞专业屏还牛
  12. 量子时代已来,与时代接轨,从这本书开始
  13. java static 执行顺序
  14. 测试了一下人脸识别,远远达不到吾之要求
  15. readelf的使用
  16. 虚拟服务器 切换任务管理器,在远程桌面连接中使用任务管理器(转)
  17. 即时配送,对接闪送预下单接口,报“签名校验失败”
  18. 随记:STM32L053LL库LPUART串口DMA接收数据
  19. 哈佛大学幸福课笔记二
  20. 烤箱做披萨的做法 教你做火腿肠披萨

热门文章

  1. 一些 Google 搜索词
  2. python中a=str(int(a))什么意思_如何解决TypeError:只能将str(而不是“int”)连接到str - python...
  3. infor wms 项目启动_全一,企业物流定制专家——企业客户项目管理流程解析
  4. 如何在GraphPad Prism 9图表上添加图片或其他对象
  5. linux 创建/删除 swap交换分区
  6. css 浮动在最上层_CSS的“层”峦“叠”翠
  7. visual stdio里面怎么取消空格补全?
  8. 详解 GNU C 标准中的 typeof 关键字
  9. c++ 中pair类模板的用法详解
  10. 损失函数|交叉熵损失函数