什么是 MVC


这里的MVC 是一种设计模式,它将应用划分为 3 个部分 :

数据(model)、展现层(view)和用户交互层(control)。

相信大家都知道在不用任何库和框架写原生的前端代码的时候,很多大牛都提倡将HTML(结构层)、CSS(表现层)、JavaScript(交互层)分离开来,目的是更好的维护代码。虽然我们这里的MVC模式和上面的前端代码分层逻辑完全不一样,但是小编觉得其实从某种宏观的角度来它们的本质都是为了更好的维护代码(解耦、复用...),让其他小伙伴更容易阅读。

1.从聊天的例子说起


这里我们举一个网页版的微信发消息的例子说起,当我们给别人发消息的时候到展示是这样的:

  • 用户提交一条新的聊天消息(按下发送的那一刹那)
  • 控制器(control)的事件处理器被触发
  • 控制器(control)创建了一个新的聊天模型记录
  • 然后控制器更新视图(聊天对话框)
  • 用户在窗口就可以看到新的聊天消息

下面我们将上面的聊天例子简单的总结下就是这样的一个过程

  • 用户和应用产生交互
  • 控制器的事件处理器被触发。
  • 控制器从模型中请求数据,并将其交给视图。
  • 视图将数据呈现给用户。

我们可以不用类库或者框架就可以实现这种MVC的架构模式,重点是需要将MVC的每一个部分按照职能划分清晰,使其保持良好的解耦。我们可以对每一个部分进行独立的开发、测试和维护

2、模型(model)


模型是用来存放所有应用数据的对象的。如当我们有一个User模型,用来存放用户的列表、他们的属性以及所有与模型有关的逻辑。当控制器(control)从服务器中抓取数据或创建新的记录时,它就会将数据包装成模型实例

模型不必知道视图和控制器的细节,模型只需要包含数据及直接和这些数据相关的逻辑,其他任何的事件处理代码、视图模板、以及和模型无关的逻辑都应该隔离在模型之外,将模型和视图代码混淆在一起是违反MVC的设计原则的。

3、视图


视图层是展示给用户的,用户可与之产生交互。在JavaScript应用中,视图大多由HTML、CSS、JavaScript模板组成。除了简单的条件语句外,视图不应当包含任何其他逻辑。

实际上,和模板类似,视图也可以从其他的应用中解耦出来。视图不必去知晓模型和控制器的所有细节,它们是相互独立的。

4、控制器

控制器作为模型和视图之间的纽带。

  • 控制器从视图(view)中获得事件和输入,对其进行处理(这个过程很可能包含模型,取的数据在模型中封装),并相应的取更新视图。
  • 当页面加载的时候,控制器会给视图添加事件监听,如监听表单的提交、按钮的点击、移动端手势的滑动等。当用户和应用产生交互的时候,控制器中的事件触发器就开始工作了

5、结合

最后我们看上面描述的MVC模型图

MVC用户交互模型

参考链接:http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html
《基于MVC的JavaScript webfu富应用开发》

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,068评论 4 62
  • MVC是一种在iOS开发中常见的设计模式,今天主要分析下MVC的原理和它的交流方式。 之前看到一篇关于MVC的文章...
    海强_hq阅读 5,225评论 6 29
  • 谈谈 MVX 中的 Model 谈谈 MVX 中的 View 谈谈 MVX 中的 Controller 浅谈 MV...
    Draveness阅读 14,842评论 0 60
  • 无论你怎么样,没钱就是无奈。 和朋友聊天,又更加感慨自己乱花钱,这是错的吧,但自己却一点不改,不改就要更加忧愁。 ...
    翔于阅读 207评论 0 1