模式-视图-控制器模式(MVC)

1模型-视图-控制器模式(Model View Controller)服务器

计算机程序在用户界面方面曾经极大地限制了用户的使用。在上世纪70年代, 一个计算机程序只能使用命令行与用户交互。而今天的程序已经使用上了丰富的图形界面,用户可使用视窗、鼠标以及键盘等多种方式进行交互,它容许移动和改变某个元素。加强的用户界面提供出了新的挑战,而Model View Controller (或MVC) 模式就是专一于这个领域的,他帮助咱们建立更具备灵活性的程序。动画

程序由用户界面、事件逻辑以及数据模型组成。例如,标准的UI 组件中列表框和组合框就包括界面元素 (点击区域、滚动条等等)、有关如何响应用户输入的逻辑机理、还有数据模型 (组件中包含的数据)。虽然有三种明确的元素,可是一般状况下,开发者编写代码时更倾向于把全部元素集合在一个对象中,而不是由几个对象来联合工做。若是界面和数据统一在一个对象中,那么它将致使一下弊端:spa

  • 难于使用对象外部的数据。 例如,若是一个对象定义了用户输入表格,而且也将用户输入保存在该对象内部, 那么要将这些用户输入的数据发送给服务器就会较为困难。他将客户通讯任务放在相同的类中,或者在该对象中定义一个接口,该接口容许访问数据,并提供惟一的访问数据的手段。 这将致使建立的程序不具备灵活性。
  • 用户界面难于修改。用户界面和数据储存在同一个对象中,那么要使用新的用户界面,你就必须为每种数据建立一个用户界面,并且还要从旧的用户界面对象中将数据转换出来。要修改用户界面将是一个难办的事情。设想一个程序用不一样的图表(线性图,条形图等等)显示数据。若是每种图表都与数据放在一块儿,那么将会难于修改图表的样式。
  • 多样式同时查看数据将变得困难。 例如,你可能想要同时用两种或以上的图表样式显示一样的数据。可是因为数据锁定在用户界面中,你必须为每种图表复制数据。
  • 难于同步查看。这是上一个问题的延伸。例如,若是你不只想要同时以多种图表显示相同的数据,并且还但愿随着数据的改变而更新这些多样式的图表,那么你就必须更新储存在每种用户界面中的相应数据。

以上全部的问题都是由于数据和用户界面被锁定在同一个对象中。而MVC 模式提供了一种方式,让你能够建立两个及以上的对象来一块儿工做。这种方法让你的代码能够重复使用,从而建立极富灵活性的程序。命令行

2理解 MVC 元素对象

MVC 模式由三个子系统组成: 模型, 视图以及控制器。在接下来的几个部分,咱们将分别了解这几个元素。而后咱们将了解他们是如何一块儿工做的。 当咱们谈论一个模型的用途,一个视图的用途以及一个控制器的用途的时候,咱们称他为MVC 分组。blog

模型(Model)接口

模型就是在MVC 组合中用来储存数据的元素。模型就是数据的仓库,他独立于视图和控制器。它既能够储存元数据,好比字符串, 也能够储存复杂的数据。模型与视图和控制器没有任何关联,这正是MVC 模式的一个特有机能,由于模型的独立性正是MVC模式的灵活之处。事件

视图Viewip

视图是用户界面的可视化部分。视图使用数据模型的数据来绘制本身。一个视图由动画、用户输入表单、图表、按钮、声音播放器或者其余须要的任何类型的用户界面组成。开发

理解视图的关键是理解它仅仅由可视化元素以及用来读取与使用数据模型的必要逻辑组成。

控制器Controller

控制器是负责获取输入内容 (例如,用户输入) 和更新模型或视图的子系统。例如,若是模型须要更新数据,那么控制器就是作这个的。

元素之间的关系

每一个元素与其余元素之间都是一种特定的关系。模型始终与视图和控制器保持独立。这意味着模型不能与其余任何元素发生关系,可是不意味着模型不会与其余元素通讯。当数据更新时,模型就会广播消息。可是,重要的是模型仅仅广播消息,而并不会设法搞清楚究竟谁在侦听。事件的使用容许模型减小与其余元素的关联程度,从而为灵活性提供了可能。

视图老是要设法与模型发生关联。视图以两种方式与模型交互: 侦听数据更新的消息,并从模型读取数据。但视图不能向模型写入数据。每一个视图仅仅与他的模型保持一种关联。由于视图能够与他的模型发生关联,可是模型不能与使用他的视图发生关联,因此一个模型能够成为多个视图的模型。

控制器也须要与模型发生关联。控制器负责根据用户输入或者系统事件更新模型。

控制器与视图之间的关系很是紧密。虽然能够几个视图使用一个控制器,可是一般视图和控制器之间的关系是一对一的。视图包含了全部的用于用户交互的界面元素。而控制器是响应用户输入的元素。在许多ActionScript 程序中,视图和控制器是同一个类。而MVC 模式的这种变化常常被称为MVC的文档视图Document View执行。

MVC 模式的关键在于数据模型独立于控制器和视图而没有任何关联。视图基于数据模型的改变而更新(刷新)。

 

相关文章
相关标签/搜索