MVC 是一种设计模式, 它将应用划分为 3 个部分 : 数据( 模型)、 展现层( 视图) 和用
户交互层( 控制器)。 换句话说, 一个事件的发生是这样的过程 :
1. 用户和应用产生交互。
2. 控制器的事件处理器被触发。
3. 控制器从模型中请求数据, 并将其交给视图。
4. 视图将数据呈现给用户。

现在来看一个真实的例子,
图 1-1 展示了在 Holla 中如何发送新的聊天消息。

从Holla中发送一个新的聊天消息

1. 用户提交一个新的聊天消息。

2. 控制器的事件处理器被触发。

3. 控制器创建了一个新的聊天模型(
Chat Model) 记录。

4. 然后控制器更新视图。

5. 用户在聊天窗口看到新的聊天消息。

我们可以不用类库或框架就实现这种
MVC 架构模式。 关键是要将
MVC 的每部分按照

职责进行划分, 将代码清晰地分割为若干部分, 并保持良好的解耦。 这样可以对每个部

分进行独立开发、 测试和维护。

下面来详细讲解
MVC 中的各个组成部分。

模型

模型用来存放应用的所有数据对象。 比如, 可能有一个
User 模型, 用以存放用户列表、

他们的属性及所有与模型有关的逻辑。

模型不必知晓视图和控制器的细节, 模型只需包含数据及直接和这些数据相关的逻辑。

任何事件处理代码、 视图模板, 以及那些和模型无关的逻辑都应当隔离在模型之外。 将

模型和视图的代码混在一起, 是违反
MVC 架构原则的。 模型是最应该从你的应用中解

耦出来的部分。

当控制器从服务器抓取数据或创建新的记录时, 它就将数据包装成模型实例。 也就是说,我们的数据是面向对象的(
object oriented), 任何定义在这个数据模型上的函数或逻辑都可以直接被调用。

视图

视图层是呈现给用户的, 用户与之产生交互。 在
JavaScript 应用中, 视图大都是由

HTML、
CSS 和
JavaScript 模板组成的。 除了模板中简单的条件语句之外, 视图不应当

包含任何其他逻辑。

实际上, 和模型类似, 视图也应当从应用的其他部分中解耦出来。 视图不必知晓模型和

控制器中的细节, 它们是相互独立的。 将逻辑混入视图之中是编程的大忌。

这并不是说
MVC 不允许包含视觉呈现相关的逻辑, 只要这部分逻辑没有定义在视图之

内即可。 我们将视觉呈现逻辑归类为“ 视图助手”(
helper) : 和视图有关的独立的小型

工具函数。

MVC与Holla聊天工具的更多相关文章

  1. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增企业通(内部简易聊天工具)

    RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本 新增企业通(内部简易聊天工具) RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用 ...

  2. 用Socket做一个局域网聊天工具(转)

    原文:http://www.cnblogs.com/technology/archive/2010/08/15/1799858.html 程序设计成为简单的服务端和客户端之间的通信, 但通过一些方法可 ...

  3. Web版的各种聊天工具

    直到近期为止,我们经常使用的即时聊天工具(QQ.msn等)了Web版,大家不用下载庞大软件,直接打开网页就能够与自己的好友聊天,非常方便.在此将时汇总        便于大家查找        节约大 ...

  4. python 开发简单的聊天工具

    python 太强大了,以至于它什么都可以做,哈哈,开个玩笑.但是今天要讲的真的是一个非常神奇的应用. 使用python写一个聊天工具 其实大家平时用的QQ类似的聊天工具,也是使用socket进行聊天 ...

  5. Java之简单的聊天工具

    今天整理资料的时候,找出自己几年前刚学Java时做过的一个简易的聊天工具,有服务器也有客户端,能发送文字消息和文件,但是用户上线并未存入数据库,而只是简单的缓存在服务器的一个数组中,所以,只要服务器一 ...

  6. 基于Nodejs开发的web即时聊天工具

    由于公司需要开发web即时聊天的功能,开始时我们主要的实施方法是用jquery的ajax定时(10秒)轮询向服务器请求,由于是轮询请求,对 服务器的压力比较大.我们网站上线的时间不长,访问量不是很大, ...

  7. 聊天工具mychat

    python学习,自己写了个简单聊天工具mychat 最近在学习python,自己写了个最最简单的聊天工具mychatv0.1. 第一版,完成基本的聊天功能. GUI用的是自带的TKinter,用到的 ...

  8. 第13天 JSTL标签、MVC设计模式、BeanUtils工具类

    第13天 JSTL标签.MVC设计模式.BeanUtils工具类 目录 1.    JSTL的核心标签库使用必须会使用    1 1.1.    c:if标签    1 1.2.    c:choos ...

  9. TCP聊天工具的实现

    由于本人天生愚钝,所以关于聊天工具的编程一直都没学会,尽管网上教程一大堆,但是关于IdTCPClient  IdTCPServer 的不多,今天终于学会一些,分享给像我一样纠结的小伙伴,下一步学习多线 ...

随机推荐

  1. angular.foreach 格式

    angular有自己的生命周期.循环给一个 angular监听的变量复值时.最好还是用angular自带的循环方法.“angular.foreach” 格式: var objs =[{a:1},{a: ...

  2. #if _MSC_VER > 1000 #pragma once #endif

    #if _MSC_VER > 1000 #pragma once #endif 解释: 这是微软的预编译控制. 在_MSC_VER较小时,它对一些东西的支持与新版不同 _MSC_VER分解如下: ...

  3. [hdu3078]Network(LCA+排序)

    题意:维护树上两点之间的最短路径,其一,将点a的值变为b,其二,求路径上第k大的值. 解题关键:LCA+sort 复杂度:$O(qn\log n + n\log n)$ 数据弱不怪我 //#pragm ...

  4. SSM之全局异常处理器

    1. 异常处理思路 首先来看一下在springmvc中,异常处理的思路:   如上图所示,系统的dao.service.controller出现异常都通过throws Exception向上抛出,最后 ...

  5. linux命令配置IP详解

    在Linux系统中,TCP/IP网络是通过若干个文本文件进行配置的,有时需要编辑这些文件来完成联网工作. vi /etc/sysconfig/network-scripts/ifcfg-eth0 :进 ...

  6. 7.20实习培训日志-Java基础程序设计结构

    Java基础程序设计结构 在 Math 类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程,如果得到一个完全可预测的结果比运行速度更重要的话,那么就应该使用StrictMath类,它使用 ...

  7. update-alternatives --Install

    up vote 1 down vote favorite I typed: sudo update-alternatives --install "/usr/bin/java" & ...

  8. MySQL8.0.16新特性:The Communication Protocol In Group Replication

    MGR优雅升级到MySQL8.0.16 传统的升级手段之一,5.7 MGR集群与8.0 MGR集群进行数据传输,程序切换新集群后测试是否正常. 如果不正常,要么将新集群的新增数据同步回旧集群,要么就舍 ...

  9. Java 普通方法和构造方法的区别

    构造方法: ①方法名和 类名相同 ②在方法名的前面没有返回值类型的声明 ③在方法中不能使用return语句返回一个值 ④在创建对象时,要调用new,如:book b1=new book(); ⑤当没有 ...

  10. ue4 简单数据储存