MVC(Model View Controller):

  View 层是界面,Model 层是业务逻辑,Controller 层用来调度 View 层和 Model 层,

  将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果

    

  1、数据关系:

    ① View 接受用户交互请求

    ② View 将请求转交给 Controller

    ③ Controller 操作 Model 进行数据更新

    ④ 数据更新后,Model 通知 View 更新变化的数据

    ⑤ View 更新变化的数据

注:前 2 步可以替换成用户直接与 Controller 交互

  

  2、通信方式:单向通信

  3、MVC 优点:

    ① 耦合性低,视图层和业务层分离 ==》 允许更改视图层代码而不用重新编译模型和控制器代码

    ② 重用性高  ③ 生命周期成本低  ④ 部署快

    ⑤ MVC 使开发和维护用户接口的技术含量降低

    ⑥ 可维护性高,分离视图层和业务逻辑层

  4、MVC 缺点:

    ① 不适合中小型规模的应用程序

    ② 视图与控制器间联系过于紧密

    ③ 视图对模型数据的低效率访问

  5、结构实现:

    ① View:使用 Composite 模式

    ② View 和 Controller:使用 Strategy 模式

    ③ Model 和 View:Observer 模式同步消息

  6、模式简明:

    ① Composite 模式:组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,

                    使得客户以一致的方式处理单个对象以及对象的组合

    ② Strategy 模式:Controller是View的一个策略,Controller对于View是可替换的,

                    View和Controller的关系是一对多,在该模式下,一个类的行为或其算法可以在运行时更改

    ③ Observer 模式:由两部分组成,被观察的对象和观察者,观察者也被称为监听者;对应到 MVC 中,

                     Model 是被观察的对象,View 是观察者,Model 层一旦发生变化,View 层即被通知更新

MVP(Model-View-Presenter):

  Model 提供数据、View 负责显式、Presenter 负责逻辑处理,与 MVC 一个重大区别是不直接使用 Model

  1、数据关系:

    ① View 接收用户交互请求

    ② View 将请求转交给 Presenter

    ③ Presenter 操作 Model 进行数据更新

    ④ Model 通知 Presenter 数据发生了变化

    ⑤ Presenter 更新 View 数据

  2、通信方式:双向通信

  3、MVP 优点:

    ① 模型与视图完全分离 ==》 可以修改视图而不影响模型

    ② 可以更高效地使用模型 《== 所有交互都发生在 Presenter 内部

    ③ 可以将一个 Presenter 用于多个视图而不需要改变 Presenter 的逻辑

    ④ 便于测试 《== 逻辑都放在 Presenter  中,可脱离用户接口来测试逻辑

  4、MVP 缺点:

    View 和 Presenter 的交互过于频繁

  5、结构实现:

    ① View:使用 Composite 模式

    ② View 和 Presenter:使用 Mediator 模式

    ③ Model 和 Presenter:使用 Command 模式同步信息

  6、 模式简明:

    ① Mediator 模式:定义了一种封装对象之间交互的中介

    ② Command 模式:所有动作或者行为所需信息被封装到一个对象之内,解耦了发送者与接收者之间的联系

                                     Command 是无状态惰性的,只有在需要的时候才被创建

MVVM(Model-View-ViewModel):

  MVP 模式和 WPF 结合的应用方式发展演变过来的一种新型架构模式

  1、数据关系:

    ① View 接收用户交互请求

    ② View 将请求转交给 ViewModel

    ③ ViewModel 操作 Model 数据更新

    ④ Model 更新完数据,通知 ViewModel 数据发生变化

    ⑤ ViewModel 更新 View 数据

  2、通信方式:双向绑定(View/Model 变化,自动反映在 ViewModel,反之亦然)

  3、MVVM 优点:

    ① 低耦合,View 可独立于 Model 变化和修改,一个 ViewModel 可绑定到不同的 “View” 上,

        当 View 变化时 Model 可不变,反之亦然

    ② 可重用性,可把一些视图逻辑放在一个 ViewModel 里,让多个 View 重用这段视图逻辑

    ③ 独立开发,不同人员可注重不同的部分

    ④ 界面素来是比较难于测试的,而现在测试可以针对ViewModel来写

  4、MVVM 和 MVP 的区别:

    MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致

    唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。

    这样开发者就不用处理接收事件和View更新的工作,框架已经帮你做好了。

MVC、MVP与MVVM架构模式的更多相关文章

  1. 浅谈MVC、MVP、MVVM架构模式的区别和联系

    MVC.MVP.MVVM这些模式是为了解决开发过程中的实际问题而提出来的,目前作为主流的几种架构模式而被广泛使用. 一.MVC(Model-View-Controller) MVC是比较直观的架构模式 ...

  2. MVC、MVP、MVVM架构模式

    MVC模式 如何设计一个程序的结构,这是一门专门的学问,叫做"架构模式"(architectural pattern),属于编程的方法论. MVC模式就是架构模式的一种,不仅适用于 ...

  3. Android -------- MVC,MVP 和 MVVM 架构设计模式

    MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身很容易理解,但是要讲清楚,它与衍生的 MVP 和 MVVM 架构的区别就不容易了. 一.MVC MV ...

  4. MVC MVP 和 MVVM的图示

    一直对于这些什么MVC MVP 和 MVVM都是云里雾里的 完全分不清楚 感觉jq上也没怎么用过,理解也很片面,画几张图也许能够大体分清他们之间的区别. 1.MVC(Model-View-Contro ...

  5. [转载]Android MVC,MVP和MVVM 思想&例子

    在Android开发中,常采用 MVC(Model-View-Controller)或者MVP(Model-View-Presenter) 等框架模式.设计如图   mvc mvp 可以看出,在 MV ...

  6. iOS - MVVM 架构模式

    1.MVVM 从字面意思来理解,MVVM 即 Modal View ViewModel(模型 视图 视图模型).MVC 是一个用来组织代码的权威范式,也是构建 iOS App 的标准模式.Apple ...

  7. 精通MVC网站、MVVM开发模式、Razor语法

    http://www.cnblogs.com/powertoolsteam/p/MVC_one.html ASP.NET MVC (一)——深入理解ASP.NET MVC 以下是ASP.NET MVC ...

  8. 一文解读MVC/MVP/MVVM (转)

    这篇文章对目前 GUI 应用中的 MVC.MVP 和 MVVM 架构模式进行详细地介绍. MVC 在整个 GUI 编程领域,MVC 已经拥有将近 50 年的历史了.早在几十年前,Smalltalk-7 ...

  9. MVC、MVCS、MVVM、MVP、VIPER等这么多架构模式哪一个好呢?

    在项目开启阶段,其中一个很重要的环节就是选架构. 那么面对目前已知的这么多架构模式我们该怎么选择呢?这确实是个很让人头疼的问题!   下面我就在这里梳理一下目前常见的一些架构模式. 先逐个对它们的分析 ...

随机推荐

  1. CentOS 7上的进程管理

    一些杂乱的基础概念 程序是一种静态的文件,躺在磁盘上.而进程则是将程序运行起来放置于内存中.因此进程就是运行中的程序,是程序运行起来的一个实例.同一个程序可以运行为多个进程/实例. 进程之间有父子关系 ...

  2. 牛客国庆训练 H.千万别用树套树

    链接https://ac.nowcoder.com/acm/contest/1108/H 国庆队内训练的题,当时还完全没思路,就没补.现在会树状数组了,倒是能想一想,不过网上题解好多用线段树传数组的? ...

  3. MySQL数据库:group分组

    group by:分组 GroupBy语句从英文的字面意义上理解就是"根据(by)一定的规则进行分组(Group)".它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后 ...

  4. Where is the kernel documentation?; Ubuntu 上如何安装 linux 内核文档;fedora 上如何安装linux内核文档?

    有时候,linux内核文档对我们很重要,我们可以在linux系统中安装,并及时查看: 参考链接:https://askubuntu.com/questions/841043/where-is-the- ...

  5. Red Hat Enterprise Linux 官方正式版镜像下载

    Red Hat Enterprise Linux是美国红帽公司开发的商业市场导向的Linux发行版,为方便大家学习研究,整理分享历代红帽官方正式版镜像给有需要的朋友们. 下载地址:https://ww ...

  6. 服务器性能测试实时监控Linux命令

    实时监控 top -h : 查看帮助 -p : 监控指定进程,当监控多个进程时,进程ID以逗号隔开,这个选项只能在命令行下使用 top 任务区命令 M: 按内存使用率排序(大写) P:按CPU使用率排 ...

  7. Centos 7.5私有域名服务器部署(coredns+etcd)

    单机配置: 一.安装etcd:   1.安装 yum install etcd -y   2.启动 systemctl start etcd   3.设置开机启动 systemctl enable e ...

  8. 编译原理:直接推导、间接推导、n次推导、规范推导

    直接推导,直接运用规则进行的推导 间接推导.n次推导 有两种符号 第一种是,表示多次运用直接推导 第二种是,表示零次或多次运用直接推导 n表示中间的步骤数 规范推导 其实就是最右推导

  9. 《Web Development with Go》Mangodb查询collection内所有记录

    相当于select * from table; package main import ( "fmt" "log" "time" " ...

  10. JS高程中的垃圾回收机制与常见内存泄露的解决方法

    起因是因为想了解闭包的内存泄露机制,然后想起<js高级程序设计>中有关于垃圾回收机制的解析,之前没有很懂,过一年回头再看就懂了,写篇博客与大家分享一下. #内存的生命周期: 分配你所需要的 ...