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. openstack 虚拟机添加网卡

    Openstack dashborad是没有给虚拟机添加网卡这个功能的,但是后台是有这行的接口的. 首先我们创建一个虚拟机,这个虚拟机制11.11.11网段的如图:

  2. JavaScript高级程序设计学习笔记第十章--DOM

    1.DOM:文档对象模型,是针对 HTML 和 XML 文档的一个 API(应用程序编程接口). 2.DOM 可以将任何 HTML 或 XML 文档描绘成一个由多层节点构成的结构. 3.文档节点是每个 ...

  3. 《Java多线程编程核心技术》读后感(八)

    不使用等待/通知机制实现线程间通信 使用sleep()结合while(true)死循环来实现多个线程间通信 package Third; import java.util.ArrayList; imp ...

  4. 扩展thinkphp5的redis类方法

    笔者在开发时发现,thinkphp5的自带redis类方法,只有简单的读取缓存.写入缓存的基本方法,远不能满足我们业务的需求.redis本身支持五种数据类型,string(字符串).hash(哈希). ...

  5. VC/MFC的HDC,CDC,CWindowDC,CClientDC,CPaintDC详解:

    VC/MFC的HDC,CDC,CWindowDC,CClientDC,CPaintDC详解: 首先说一下什么是DC(设备描述表) 解:Windows应用程序通过为指定设备(屏幕,打印机等)创建一个设备 ...

  6. Servlet拦截匹配规则可以自已定义,拦截哪种URL合适?

    Servlet拦截匹配规则可以自已定义,拦截哪种URL合适? 当映射为@RequestMapping("/user/add")时,为例: 1.拦截*.do.*.htm, 例如:/u ...

  7. 死磕 java同步系列之JMM(Java Memory Model)

    简介 Java内存模型是在硬件内存模型上的更高层的抽象,它屏蔽了各种硬件和操作系统访问的差异性,保证了Java程序在各种平台下对内存的访问都能达到一致的效果. 硬件内存模型 在正式讲解Java的内存模 ...

  8. 用 _tcscmp 替代 strcmp 或 wcscmp

    转自:http://blog.csdn.net/eickandy/article/details/50081537 好处:是可以不管是用unicode 编码还是其他 ,代码都不用改. C++标准库函数 ...

  9. PHP json 对象 数组互相转换

    json格式转为数组/对象 json_decode() json 对象/数组转json格式 json_encode()

  10. Unity 5.6中的混合光照(下)

    https://mp.weixin.qq.com/s/DNQFsWpZm-ybIlF3DTAk2A 在<Unity 5.6中的混合光照(上)>中,我们介绍了混合模式,以及Subtracti ...