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

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

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

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

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

以上所有的问题都是因为数据和用户界面被锁定在同一个对象中。而MVC 模式提供了一种方式,让你可以创建两个及以上的对象来一起工作。这种方法让你的代码可以重复使用,从而创建极富灵活性的程序。

2理解 MVC 元素

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

模型(Model)

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

视图View

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

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

控制器Controller

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

元素之间的关系

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

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

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

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

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

 

 

转载于:https://www.cnblogs.com/6354-aa/p/9070469.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值