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. python3中,pycharm中怎么连接数据库

    因为python3现在还不能直接连接数据库,所有如果想连接,就只能通过以下方法: 在APP中的,__init__.py中,添加以下代码就可以: import pymysql pymysql.insta ...

  2. algo: 冒泡排序(Java实现)

    package com.liuxian.algo; public class MySortClass implements Comparable<MySortClass> { public ...

  3. js修改页面动态添加input框显示与按钮可编辑

    1. <%@ page language="java" contentType="text/html;charset=UTF-8"%> <%@ ...

  4. [hdu3853]LOOPS(概率dp)

    题意:迷宫是一个R*C的布局,每个格子中给出停留在原地,往右走一个,往下走一格的概率,起点在(1,1),终点在(R,C),每走一格消耗两点能量,求出最后所需要的能量期望. 解题关键:概率dp反向求期望 ...

  5. 《精通Spring4.X企业应用开发实战》读后感第五章(Bean作用域)

  6. yii2之使用ueditor

    代码效果: 1.去github下载yii2高级版ueditor扩展 2.将下载的扩展放入  /common/widgets 中(目录如图所示) 3.在视图中的代码 <?=common\widge ...

  7. Unity3d导入3dmax后model 的缩放为0.0254的原因以及解决办法

    http://blog.csdn.net/pdw_jsp/article/details/51259493 这个问题其实已经早都出现过了,今天我们这边也碰到了,这里做个记录吧 导致的问题~ 场景的比例 ...

  8. 纯CSS,多个半圆以中心点旋转

    效果图: html代码: <div style=" background:#000; position: relative; width:300px; height:300px;&qu ...

  9. 剑指Offer的学习笔记(C#篇)-- 不用加减乘除做加法

    题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 一 . 理解题目 这个题目可以让我们回归到小学,想想加法的竖式是怎么写的,哈哈,如果当时你不是那个竖式写错了, ...

  10. 【UVA - 136】Ugly Numbers(set)

    Ugly Numbers Descriptions: Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequ ...