MVC , MVP , MVVM【转 阮一峰的网络日志】

一、MVC

MVC模式的意思是,软件可以分成三个部分。

  • 视图(View):用户界面。
  • 控制器(Controller):业务逻辑
  • 模型(Model):数据保存

各部分之间的通信方式如下。

  1. View 传送指令到 Controller
  2. Controller 完成业务逻辑后,要求 Model 改变状态
  3. Model 将新的数据发送到 View,用户得到反馈

所有通信都是单向的。

二、互动模式

接受用户指令时,MVC 可以分成两种方式。一种是通过 View 接受指令,传递给 Controller。

另一种是直接通过controller接受指令。

三、实例:Backbone

实际项目往往采用更灵活的方式,以 Backbone.js 为例。

1. 用户可以向 View 发送指令(DOM 事件),再由 View 直接要求 Model 改变状态。

2. 用户也可以直接向 Controller 发送指令(改变 URL 触发 hashChange 事件),再由 Controller 发送给 View。

3. Controller 非常薄,只起到路由的作用,而 View 非常厚,业务逻辑都部署在 View。所以,Backbone 索性取消了 Controller,只保留一个 Router(路由器) 。

四、MVP

MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向。

1. 各部分之间的通信,都是双向的。

2. View 与 Model 不发生联系,都通过 Presenter 传递。

3. View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。

五、MVVM

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

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

时间: 2024-12-06 17:38:14

MVC , MVP , MVVM【转 阮一峰的网络日志】的相关文章

Flex 布局教程:语法篇(转自阮一峰的网络日志)

作者:阮一峰(转自阮一峰的网络日志,如有侵权,立即删除) 网页布局(layout)是 CSS 的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现. 2009年,W3C 提出了一种新的方案----Flex 布局,可以简便.完整.响应式地实现各种页面布局.目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能. Flex 布局将成为未来布局的首选方案

理解OAuth 2.0 - 阮一峰的网络日志

原文:理解OAuth 2.0 - 阮一峰的网络日志 理解OAuth 2.0 作者: 阮一峰 日期: 2014年5月12日 OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版. 本文对OAuth 2.0的设计思路和运行流程,做一个简明通俗的解释,主要参考材料为RFC 6749. 一.应用场景 为了理解OAuth的适用场合,让我举一个假设的例子. 有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来.用户为了使用

MVC,MVP 和 MVVM 的图示 转自阮一峰先生网络日志

MVC,MVP 和 MVVM 的图示 作者: 阮一峰 复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身很容易理解,但是要讲清楚,它与衍生的 MVP 和 MVVM 架构的区别就不容易了. 昨天晚上,我读了<Scaling Isomorphic Javascript Code>,突然意识到,它们的区别非常简单.我用几段话,就可以说清. (题图:摄于瓦伦西亚,西班牙,2014年8月) 一.MVC

React 入门实例教程[阮一峰的网络日志] (分享)

作者: 阮一峰 https://github.com/ruanyf/react-demos 转自:http://www.ruanyifeng.com/blog/2015/03/react.html 对着文章的说明,看明白了,再跑下demo ....

【转】【阮一峰的网络日志】Git 使用规范流程

作者: 阮一峰 日期: 2015年8月 5日 团队开发中,遵循一个合理.清晰的Git使用流程,是非常重要的. 否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护. 下面是ThoughtBot 的Git使用规范流程.我从中学到了很多,推荐你也这样使用Git. 第一步:新建分支 首先,每次开发新功能,都应该新建一个单独的分支(这方面可以参考<Git分支管理策略>). # 获取主干最新代码 $ git checkout master $ git pull # 新建一个开发分

阮一峰的网络日志 算法

http://www.ruanyifeng.com/blog/algorithm/ 2015年 理解矩阵乘法([email protected]) 蒙特卡罗方法入门([email protected]) 泊松分布和指数分布:10分钟教程([email protected]) 2013年 朴素贝叶斯分类器的应用([email protected]) 相似图片搜索的原理(二)([email protected]) TF-IDF与余弦相似性的应用(三):自动摘要([email protected])

阮一峰的网络日志有感

http://www.ruanyifeng.com/blog/javascript/ 1.闭包 我看过了之后的理解,闭包就是函数中的函数,为啥这么写呢,平时我们可以获取全局变量的值,现在我要获取函数里面的值,怎么获取呢,就是通过函数中在写一个函数(这个函数可以获取父函数的变量),然后return出去这个函数,就可以在外部拿到这个函数里面的变量了啊,闭包耗内存,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁. var name = "The Window"; var objec

阮一峰的网络日志有感2(面向对象编程)

看后有感今天就来总结一下吧 主要讨论封装和继承 ********************** 封装封装封装封装封装 **************************** 构造函数模式生成对象, 所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上. function Cat(name, color) { this.color = color; this.name = name; } var

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

来源: Android App的设计架构:MVC,MVP,MVVM与架构经验谈 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于App的架构如何设计: 我的App需要应用这些设计架构吗? MVC,MVP等架构讲的是什么?区别是什么? 本文就来带你分析一下这几个架构的特性,优缺点,以及App架构设计中应该注意的问题. 1.架构设计的目的 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使得程序在开发的过程中,开发人员