MVC模式ppt课件.ppt
- 文档编号:1886633
- 上传时间:2022-10-25
- 格式:PPT
- 页数:43
- 大小:660KB
MVC模式ppt课件.ppt
《MVC模式ppt课件.ppt》由会员分享,可在线阅读,更多相关《MVC模式ppt课件.ppt(43页珍藏版)》请在冰豆网上搜索。
MVC体系结构模式1MVC体系结构模式&教学目标:
掌握MVC模式的概念熟练掌握MVC模式的语境、问题与解决方案掌握MVC模式的结构与实现&教学重点:
掌握MVC模式的概念及其语境、问题与解决方案&教学难点:
熟练掌握MVC模式的语境、问题与解决方案2交互式系统&系统与用户的交互:
主要通过GUI&目的:
增强可用性&主要挑战:
保持功能内核独立于用户接口&UI的易变性:
“式样和感觉”、适应客户业务过程。
3交互式系统&两种模式,为交互式软件系统提供基本的结构化组织。
MVC(Model-View-Controller)n将一个交互式应用程序分为三个组件PAC(Presentation-Abstraction-Control)n以合作agent的层次形式定义了交互式软件系统的一种结构。
4模型-视图-控制器(MVC)模式&该模式将一个交互式应用程序分成3个组件.模型:
包含核心功能和数据。
视图:
向用户显示信息。
控制器:
处理用户输入。
&视图和控制器组成了用户接口。
&变更-传播机制保证了模型和用户接口之间的一致性。
5ExampleofMVCFigure1InformationSystemforPoliticalSelection6语境&具有灵活人-机接口的交互式应用程序。
可以灵活选择不同的信息显示方式。
可以灵活选择用户的输入方式。
7问题
(1)&关于用户接口的需求尤其易变。
输入方式的改变,显示方式的改变,&不同的用户期望不同的用户界面。
即使对于同一个应用,也可能需要集成多种用户界面。
&如果把用户接口和功能内核捆绑在一起,难以得到用户界面的灵活特性。
8问题
(2)&考虑以下强制条件同一个信息可以在不同的地方有不同的表示。
应用程序的显示和动作必须立即反映出对数据的操作。
用户的接口易于改变,甚至在运行时可也可以改变。
支持不同的“式样和感觉”标准,或者移植用户接口不应影响应用程序内核的代码。
9解决方案
(1)&将应用程序分成三个部分:
处理、输出和输入模型组件:
封装了内核数据和功能。
模型独立于特定输出表示或者输入方式。
视图组件向用户显示信息。
视图从模型获得数据。
一个模型可能有多个视图。
每个视图有一个相关的控制器组件。
控制器组件接受输入,通常将鼠标Move、Click或键盘Type等用户输入翻译成为对视图或者模型的服务请求。
用户仅仅通过控制器与系统交互。
10解决方案
(2)&一个模型可以有多个视图。
如果用户通过一个视图的控制器改变了模型,那么依赖于该数据的其他视图也应该反映出这样的变化。
一旦模型的数据发生了变化,模型需要通知所有相关的视图做出相应的变化。
这样的方式可以通过出版者-订阅者设计模式完成。
11结构
(1)&模型组件包含了应用程序的功能内核。
封装了相应的数据并输出执行特定应用程序处理的过程。
控制器代表用户调用这些过程。
模型也提供访问它封装的数据的函数,这些函数可以由视图组件使用。
12结构
(2)&变更-传播机制维护了一个模型中相依组件的注册表。
所有视图还有一些控制器在这个表中登记了对变更通知的需求。
模型状态的改变将触发变更-传播机制。
每个在表中登记的视图和控制器都会收到变更通知。
&变更-传播机制是模型与视图、控制器之间的唯一连接。
13结构(3)&视图组件向用户呈现信息不同的视图用不同的方法呈现信息。
每个组件都有一个更新函数。
这个函数被模型变更通知激活。
这个函数被激活(此时模型已经改变)后,将使得视图重新和模型一致。
在初始化阶段,视图向模型登记请求变更通知。
每个视图将创建一个合适的控制器。
14结构(4)&控制器组件接受作为事件的用户输入。
事件如何发送到控制器由用户界面平台决定。
事件被翻译成为对模型或者视图的请求。
如果控制器的行为依赖于模型的状态,那么控制器也需要向模型登记请求变更通知。
例如:
模型的改变使一个菜单输入能用或禁用时。
15结构(5)Figure2ClassdiagramofPoliticalSelection16动态特征
(1)&场景用户输入导致模型变化,并触发变更-传播机制。
控制器接受到事件,解释事件并且启动模型的服务过程。
模型执行相应的过程,并导致内部状态的变化。
模型调用其更新过程,向所有登记请求了变更-传播机制的视图和控制器发出通知。
每个视图从模型中读取新数据并且重新显示。
每个控制器修改自己的行为,比如禁用某个功能。
最初的控制器恢复控制并从事件处理过程返回。
17动态特征
(2)&用户输入导致模型变化,并触发变更-传播机制的过程18动态特征(3)&场景初始化过程创建模型实例,并初始化其数据。
创建视图对象,并用对模型的引用作为其初始化参数之一。
视图通过调用附属过程支持变更-传播机制。
视图创建控制器,此时将模型和视图的引用作为参数传递给控制器初始化过程。
控制器通过调用附属过程来支持变更-传播机制。
初始化完成,应用程序开始处理事件。
19动态特征(4)&MVC系统的初始化过程Mainprog.ModelViewControllerinitializeviewmodel,viewstartModelattachmakeControllerinitializeattachcontroller20实现
(1)&将人机交互从核心功能中分离出来设计模型组件来封装内核所需要的数据和功能。
提供访问待显示数据的功能。
确定模型功能的哪一部分应该通过控制器向用户展示。
21实现
(1)classModelListvotes;Listparties;public:
Model(ListpartyNames);/accessinterfaceformodificationbycontrollervoidclearVotes();/setvoingvaluesto0voidchangeVote(Stringparty,longvote);/factoryfunctionsforviewaccesstodataIteratormakeVoteIterator()returnIterator(votes);IteratormakePartyIterator()returnIterator(parties);/.tobecontinued22实现
(2)&实现变更-传播机制采用出版者-订阅者设计模式。
模型组件作为出版者,视图和控制器作为订阅者。
提供过程,使得视图和控制器可以自由订阅和退定通知。
模型的过程如果改变了状态,那么需要通知每个订阅者。
&在有些框架软件中,这个机制已经被隐含实现了。
23classObservercommonancestorforviewandcontrollerpublic:
virtualvoidupdate()/defaultisno-op;classModel/.continuedpublic:
voidattach(Observer*s)registry.add(s);voiddetach(Observer*s)registry.remove(s);protected:
virturalvoidnotify();private:
Setregistry;voidModel:
notify()/callupdateforallobserversIteratoriter(registry);while(iter.next()iter.curr()-update();24实现(3)&设计并实现视图设计视图的外观,并实现画图过程来将视图显示在屏幕上(需要使用用户界面平台的功能)。
实现更新过程来反映模型的变化。
n可以简单地调用画图功能,但是不适应模型频繁变化的情况。
n向更新过程提供一些参数来确定是否重画,以及重画范围。
n可以通过累积变化的方式减少重画的频率。
&还需要实现视图的初始化过程。
支持变更-传播机制;初始化控制器。
25classview:
publicObserverpublic:
View(Model*m):
myModel(m),myController(0)myModel-attach(this);virtualView()myModel-detach(this);virtualvoidupdate()this-draw();/abstractinterfacetoberedefined:
virtualvoidinitialize();/seebelowvirtualvoiddraw();/(re-)displayview/.tobecontinuedbelowModel*getModel()returnmyModel;Controller*getController()returnmyController;protected:
Model*myModel;Controller*myController;/setbyinitialize;classBarChartView:
publicViewpublic:
BarChartView(Model*m):
View(m)virtualvoiddraw();voidBarChartView:
draw()/.tobecontinued26实现(4)&设计并实现控制器对于每个视图,指定回应用户动作的系统行为。
控制器用一个专用的过程来接受并且解释这些用户动作(事件)。
可以考虑使用command设计模式来隔离模型和控制器之间的联系。
27实现(4)classController:
publicObserverpublic:
virtualvoidhandleEvent(Event*)/default=noopController(View*v):
myView(v)myModel=myView-getModel();myModel-attach(this);virtualController()myModel-detach(this);virtualvoidupdate()protected:
Model*myModel;View*myView;28实现(5)&设计并实现视图-控制器关系视图在其初始化期间创建和它关联的控制器。
可以考虑使用工厂方法(factorymethod)设计模式来建立视图和控制器的类层次结构。
29classview:
publicObserverpublic:
/C+deficit:
useinitializetocallrightfactorymethodvirtualvoidinitialize()myController=makeController();virtualController*makeController()returnnewController(this);classTableController:
publicControllerpublic:
TableController(TableView*tv):
Controller(tv)virtualvoidhandleEvent(Event*e)/.interpretevente/forinstance,updatevotesofapartyif(vote&party)/entrycomplete:
myModel-changeVote(party,vote);classTableView:
publicViewpublic:
TableView(Model*m):
View(m)virtualvoiddraw();virtualController*makeController()returnnewTableController(this);30实现(6)&实现MVC的总体的初始化部分首先初始化模型。
创建和初始化视图。
初始化之后进入一个循环,或者包含循环的过程。
&在MFC中使用AppWizard时,这个部分通常已经被实现了。
31实现(6)main()/initializemodelList
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MVC 模式 ppt 课件