欢迎来到天天文库
浏览记录
ID:41037437
大小:1.78 MB
页数:51页
时间:2019-08-14
《windows编程技术12文档与视图》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、第12章文档与视图MFC提供了将应用程序的数据与显示分开的文档-视图结构,它为应用程序提供了统一的框架,参见图12-1。对应的MFC应用程序的有关类及其MFC基类,可以参见2.2.5节的图2-9和图2-10。MFC的文档-视图结构是MVC模式的一种部分实现。12.1MVC图12-1SDI应用程序中的对象MVC是一种软件架构模式,通过分解程序的不同功能,达到降低程序设计的复杂度、利于程序员专业分工、简化程序的维护和扩展的目的。MVC是1979年挪威计算机科学家TrygveReenskaug在Xer
2、ox(施乐公司)PARC(PaloAltoResearchCenter,帕洛阿尔托研究中心)工作时,为(历史上第二个面向对象程序设计语言和第一个真正的集成开发环境)SmallTalk提出的。12.1.1概念MVC(Model-View-Controller,模型—视图—控制器)是一种软件架构模式,它把软件系统分为如下三个基本部分(参见图12-2):l模型(Model)——数据(库)。l视图(View)——图形界面(显示/表示)。l控制器(Controller)——程序功能(算法)。图12-2MV
3、C模式的关系图MVC模式的目的是实现一种动态的程序设计,简化对程序的后续修改和扩展,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部份分离的同时,也赋予了各个基本部分应有的功能,专业人员可以通过自身的专长进行分组合作:数据库专家利用“模型”进行数据管理和数据库设计、界面设计人员利用“视图”进行图形界面设计、而程序员则利用“控制器”编写程序应有的功能(实现算法等等)。5112.1.2层次模型(Model,数据模型)用于封装与应用
4、程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权利,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。但是模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。(比较:观察者模式(软件设计模式))视图(View)视图层能够实现数据有目的的显示(理论上,这不是必需的)。在视图中一般没有程序上的逻辑。为了实现视图上的刷新
5、功能,视图需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。控制器(Controller)控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。12.1.3实现lSmallTalk1980年MVC最早被应用于XeroxPARC的面向对象、动态类型、自反射的编程语言SmallTalk-80环境中,运行在首个具有GUI的原型计算机Alto(男高音)上。lMacApp1985年Apple将MVC用于其推出的M
6、acOS系统的面向对象的应用程序框架MacApp中,这是MVC首次在商用产品中的实际应用。lMFC1993年2月微软在其随VisualC++1.0推出的MFC2.0中,引入了文档-视图(Document/View)架构,它也是一种对于MVC的早期部分实现。MFC将程序分成视图(View)和文档(Document)两大类,其中的CDocument对应MVC中的数据模型(Model),CView相当于MVC中的视图+控制(View+Controller),再加上应用程序类CWinApp,合成三大项。
7、但是MFC基本上是一个失败的MVC作品。由于MFC对Document/View的定义过于模糊,未将Controller(消息映射)部份取出,因此Controller既可置入View也可置入Document,但不管置入哪一方面,都会与View或Document绑死而缺乏弹性。lJavaEE——Struts511999年12月Sun推出的JavaEE(JavaEnterpriseEdition,Java企业版,原来叫J2EE)和其他的各种框架不一样,它为模型对象(ModelObjects)定义了一个
8、规范。典型例子是由CraigMcClanahan于2000年5月所开发的开源JavaEE轻型Web应用框架ApacheStruts。n视图(View)——在JAVAEE应用程序中,视图(View)可能由JSP(JavaServerPage,爪哇服务器网页)承担。生成视图的代码则可能是Servlet的一部分,特别是在客户端服务端交互的时候。n控制器(Controller)——JAVAEE应用中,控制器可能是一个Servlet。n模型(Model)——模型则是由一个实体Bean来实现。l.NET——
此文档下载收益归作者所有