5

MVC之父对“模型-视图-控制器”的最初定义

 3 years ago
source link: https://blogread.cn/it/article/3874?f=hot1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

MVC之父对“模型-视图-控制器”的最初定义

浏览:4472次  出处信息
MVC(Model-View-Controller,模型―视图―控制器模式)用于表示一种软件架构模式。它把软件系统分为三个基本部分:模型(Model),视图(View)和控制器?ontroller)。

     MVC 由 Trygve Reenskaug 提出,最早被应用在 SmallTalk-80 环境中。模型―视图―控制器模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外此模式通过对复杂度的简化使程序结构更加直观。软件系统通过对自身基本部份分离的同时也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长分组:

控制器 - 程序员编写程序应有的功能(实现算法等等) 视图 - 界面设计人员进行图形界面设计 模型 - 数据库专家进行数据管理和数据库设计

    我创立的Model-View-Controller(MVC)模式作为一个直观的解决方案,针对的是一个一般性的问题,即让用户能够支配自己从多个角度看到的信息。MVC引起了的关注之多,让人有点始料不及。有些教材对MVC的改造甚至达到了离经叛道的程度,甚至企图达到让计算机来控制用户的悖谬目的。

    而MVC的根本目的是在人类头脑中的心智模型和计算机中的数字模型之间架起一座桥梁。理想情况下,MVC的实现方案与用户直接查看和操作领域信息的直觉吻合。假如用户想在不同的上下文中以及/或者以不同的视角看到相同的模型要素,那MVC就有了它的用武之地。

    模型,表示知识。它既可能是一个对象(当然,如果仅一个对象就没多大意思了),也可能是由许多对象组成的结构。

    模型及其组成部分是一方,而模型创建者意识中要表现的世界则是另一方,这两方应该一一对应。自然地,模型的每个节点都应该明确对应于问题的一个部分。

    模型的所有节点都应该把问题解决到相同的程度,把面向问题的节点(例如,在日程中添加约会活动)与实现细节(例如,用段落展示)混在一起不容易理解,是应该避免的做法。

    视图是模型的(可见的)表现。视图通常会突出模型的某些属性,同时隐藏其他属性。从这个意义上讲,视图就像是一个展示过滤器。

    视图依赖于模型(或模型的一部分),通过询问问题的方式从模型中获得用于展示的必要数据。视图通过发送适当的消息,也可以更新模型。这些问题和消息都要按照模型的术语来传达,由此视图必须得知道自己所要表现的模型,它的属性都有什么语义。(比如说,视图可能会询问模型的标识符,期待返回一个Text的实例,但它可能并不认为模型就是Text类。)

    控制器是用户与系统之间的纽带。它为用户提供输入,即它会将相关的视图显示在屏幕上适当的位置上(供用户浏览查看)。它为用户提供输出的手段,即它会向用户展示菜单以及其他能接受命令和数据的控件。控制器接收到上述的用户输出,将其转换为适当的消息,然后再将这些消息传递给一或多个视图。

    控制器不应该当作视图来用,例如,不能用控制器来画箭头以连接视图的节点。

    从另一方面讲,视图也不应该关心用户输入,比如鼠标操作或按键操作之类的。在任何情况下,都应该能够在控制器里编写一个方法,该方法将消息发送到视图,以便原原本本地再现用户的命令。

    控制器负责连接其所有的视图,这些视图是该控制器的组成部分。有的视图会提供一个特殊的控制器,叫编辑器(editor),以便用户通过它来修改由视图表现的信息。这种编辑器可以被挂接到控制器与其视图之间路径上,类似于控制器的扩展。编辑完成之后,则从路径上将编辑器移除并丢弃。

    注意,编辑器要通过相关视图的具体表现来与用户沟通,因此编辑器与视图是紧密相关的。控制器通过询问视图来获悉编辑器的存在,除此之外没有其他适当的信息来源。

建议继续学习:

QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK