chp7-软件架构技术-3-MVC_第1页
chp7-软件架构技术-3-MVC_第2页
chp7-软件架构技术-3-MVC_第3页
chp7-软件架构技术-3-MVC_第4页
chp7-软件架构技术-3-MVC_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

交互式系统体系结构

MVC架构模式1交互式系统系统与用户交互主要通过GUI目的:增强可用性,适应用户业务需求关键:保持功能内核独立于用户接口两种模式MVC-Model-View-Controller将一个交互式应用分为三个组件PAC-Presentation-Abstraction-Control以合作Agent的层次形式定义交互式系统的一种结构2/MVC体系结构MVC根本概念及应用领域MVC主体结构MVC动态特征MVC实现一个例子3/MVC根本概念MVC将一个交互式应用程序分成3个组件模型:包含核心功能和数据〔核心业务逻辑〕视图:向用户显示信息控制器:处理用户输入变更-传播机制保证了模型和用户界面之间的一致性4/100目的将人机交互从核心功能中别离出来(M)模型对用户来说是透明的,用户只需要观察视图(V)用户与模型的交互通过控制器提供的平安方法来实现(C)这种别离对设计开发人员是强制性的!!MVC根本概念5/100MVC应用领域具有灵活人-机界面的交互式应用程序可以灵活选择不同的信息显示方式可以灵活选择用户的输入方式针对不同的用户角色,提供不同的用户界面不同用户具有不同权限,操作的方式也有所不同6/100MVC体系结构MVC根本概念及应用领域MVC主体结构MVC动态特征MVC实现一个例子7/模型〔Model〕封装了内核功能和数据业务逻辑〔软件的核心〕数据以及访问它们的函数〔视图组件使用〕执行特定应用程序处理的过程〔控制器代表用户调用〕模型对于用户来说是不可见的(M与V独立)模型独立于特定输出表示或者输入方式(M与C独立)用户只能通过控制器操作模型(C是M与V之间桥梁)8/变更-传播机制(1)一个模型可对应多个视图如果用户通过一个视图的控制器改变了模型中的数据,那么依赖于该数据的其他视图也应该反映出这样的变化一旦模型的数据发生了变化,模型需要通知所有相关的视图做出相应的变化维护数据的一致性9/变更-传播机制(2)工作原理:模型维护了一个表所有视图还有一些控制器在这个表中登记了对变更通知的需求模型状态的改变将触发变更-传播机制,每个在表中登记的视图和控制器都会收到变更通知可通过观察者〔Observer〕设计模式完成10/视图〔View〕向用户显示信息不同的视图使用不同的方法呈现信息每个视图组件都有一个更新函数,这个函数被模型变更通知激活函数被激活〔此时模型已经改变〕后,将使得视图重新和模型一致在初始化阶段,视图向模型登记请求变更通知〔表〕从模型获得数据通过状态查询函数实现例如:定时刷新11/控制器〔Controller〕每个视图有一个相关的控制器组件(一一对应)控制器组件接受事件,并翻译成输入事件如何发送到控制器由用户界面平台决定事件被翻译成为对模型或者视图的请求如果控制器的行为依赖于模型的状态,那么控制器也需要向模型登记请求变更通知例如:用户点击按钮,按钮的事件响应函数将采取相应的措施处理用户要求用户仅仅通过控制器与系统交互12/MVC组件类型的关系和功能13/注意视图与控制器是一一对应的关系模型与视图是一对多的关系变更-传播机制保持模型与视图、控制器之间状态的一致性14/MVC体系结构MVC根本概念及应用领域MVC主体结构MVC动态特征MVC实现一个例子15/动态特征(1):MVC系统的初始化MainprogramModelViewControllermodelviewmodel,viewcontrollerstart16/动态特征(2):MVC系统初始化创立模型实例,并初始化其数据创立视图对象,并用对模型的引用作为初始化参数之一视图通过调用附属过程支持变更-传递机制视图创立控制器,此时将模型和视图的引用作为参数传递给控制器初始化过程控制器通过调用附属过程来支持变更-传递机制初始化完成,应用程序开始处理事件17/动态特征(3):

输入导致模型变化,触发变更-传递机制18/动态特征(4):

输入导致模型变化,触发变更-传递机制控制器接受到事件,解释事件并且启动模型的效劳过程〔handleEvent、service〕模型执行相应的过程,并导致内部状态的变化〔notify〕模型调用其更新过程,向所有登记请求了变更-传播机制的视图和控制器发出通知〔update〕每个视图从模型中读取新数据并且重新显示〔getData〕每个控制器修改自己的行为,比方禁用某个功能最初的控制器恢复控制并从事件处理过程返回19/MVC体系结构MVC根本概念及应用领域MVC主体结构MVC动态特征MVC实现一个例子20/MVC实现(1)设计并实现模型组件封装内核所需要的数据和功能确定模型的哪一局部应该通过控制器向用户显示,提供访问待显示数据的功能实现核心业务逻辑21/MVC实现(2)实现变更-传播机制采用观察者〔Observer〕设计模式每个视图和需要观察模型变更的控制器都在模型中注册自己的观察者〔表〕模型中可以随意添加和删除观察者实现通知各观察者并改变其状态的方法22/MVC实现(3)设计并实现视图设计视图的外观,并实现画图过程显示视图实现更新过程来反映模型的变化可以简单地调用画图功能,但是不适应模型频繁变化的情况向更新过程提供一些参数来确定是否重画,以及重画范围可以通过累积变化的方式减少重画的频率实现视图的初始化支持变更-传递机制初始化控制器23/MVC实现(4)设计并实现控制器对于每个视图,指定回应用户动作的系统行为控制器用一个专用的过程来接受并且解释这些用户动作〔事件〕实现事件响应函数24/MVC实现(5)实现MVC的总体的初始化首先创立并初始化模型实例创立和初始化视图实例同时会创立相应的控制器实例初始化之后进入一个循环,或者包含循环的过程25/MVC体系结构MVC根本概念及应用领域MVC主体结构MVC动态特征MVC实现一个例子26/观察者(Observer)设计模式:通知状态变化(1)需求有多个类的状态依赖于一个主类的状态变化解决方案多个类作为观察者,主类作为被观察者设计一个观察者接口,其中包含一个更新方法,所有观察者都实现该接口在主类中保存一个观察者队列,存放所有观察者对象一旦主类状态发生变化,就通知观察者队列改变相应类的状态27/观察者(Observer)设计模式:通知状态变化(2)28/观察者(Observer)设计模式:通知状态变化(3)Observer的设计接口:每个具体的观察者子类都必须实现自己的更新方法抽象类:更新方法为抽象,但有一些其它方法是所有观察者子类所共有,可以在基类中实现具体基类:基类中实现默认的更新方法,需要自己独特的更新方法的子类覆盖基类的更新方法29/观察者(Observer)设计模式:通知状态变化(4)每当新建一个观察者(Observer)时,就要将它注册(addObserver方法)给被观察者(Subject)一旦被观察者(Subject)的状态发生变化,就必须通知(notifyObservers方法)所有观察者(Observer)通知的同时,notifyObservers方法循环调用所有观察者的update方法,更新观察者30/应用实例(1)需求有两个窗口,每个窗口分别有一个标签和一个按钮点击其中一个窗口中的按钮,可以使标签的字体增大,点击另一个可以使其字体减小一个窗口对字体的改变必须立即反映在另一个窗口中目的采用MVC模式设计实现使用观察者〔Observer〕设计模式模拟变更-传播机制31/应用实例(2):类图32/应用实例(3):Observer接口interfaceObserver{ //更新函数 publicvoidupdate();}33/应用实例(4):M类classM{ privateintsize=20;//字体大小

//使字体变大

publicvoidenlarge(){ this.setSize(this.getSize()+5); }//使字体变小publicvoidabridge(){ this.setSize(this.getSize()-5);}34/应用实例(5):M类//观察者队列

privateList<Observer>observers=newArrayList<Observer>(); publicvoidaddObservers(Observerobserver){ this.observers.add(observer); } //当模型有变更时,通知所有观察者改变相应的视图

publicvoidnotifyObservers(){ Iterator<Observer>iter=this.observers.iterator(); while(iter.hasNext()){ iter.next().update(); } } ……}35/应用实例(6):C1类classC1implementsActionListener{//一个控制器与一个视图和一个模型对应privateV1v1;privateMm;//构造函数publicC1(V1v1,Mm){ this.m=m; this.v1=v1;}//向模型注册此控制器对应的视图的观察者publicvoidregister(){ this.m.addObservers(this.v1);}36/应用实例(7):C1类/***实现事件监听器,*当点击按钮时,增大标签的字体*/publicvoidactionPerformed(ActionEvente){ this.m.enlarge(); this.m.notifyObservers();}……}37/应用实例(8):V1类classV1implementsObserver{ JLabellabel=newJLabel("MVC"); JButtonbutton=newJButton("增大字体"); privateC1c1;//与视图V1对应的控制器//实现Observer接口,当有变更时,改变相应视图publicvoidupdate(){ Fontfont=newFont(this.label.getText(),c1.getM().getStyle(), c1.getM().getSize()); this.label.setFont(font);}38/应用实例(9):V1类publicV1(Mm){ //实例化一个链接此视图和模型的控制器

c1=newC1(this,m); //注册此视图的观察者到模型中

c1.register(); …… } ……}39/应用实例(10):主程序TestC2与V2的实现与C1和V1的实现相似publicclassTest{/***@paramargs*/publicstaticvoidmain(String[]args){ Mm=newM(); V1v1=newV1(m); V2v2=newV2(m);}}40/典型的WebMVC41/WebMVC实现早期的JSP标准提出了两种用JSP技术建立应用程序的方式JSPModel1、JSPModel2Structs框架实现MVCJava开发WebApp常用的MVC设计模式42/JSPmodel143/JSPmodel1适合简单应用,不能满足复杂的大型应用程序的实现。随意运用Model1,会导致JSP页内被嵌入大量的脚本片段或Java代码,特别是当需要处理的请求量很大时,情况更为严重。Java程序员实现没问题。但导致角色定义不清和职责分配不明,给工程管理带来不必要的麻烦。44/JSPmodel2-MVC模式45/JSPmodel2实现Model层:实现业务逻辑,可用JavaBean或EJB实现。封装了问题的核心数据、逻辑和功能的计算关系。View层:与用户交互—界面,用JSP实现。从模型获得显示信息,可有不同显示形式。Controller层:桥梁,分派用户的请求并选择恰当的视图用于显示;解释用户的输入并将它们映射为模型层可执行的操作。一般是Servlet46/Struts框架实现MVC模式47/Controller由ActionServlet构成:接受客户端请求,并调用model处理请求。ActionServlet读取Struts-config.xml中的ActionMapping对象〔实现了一个请求到一个Model局部中Action处理器对象之间的映射〕;Model中的Action对象会完成相关业务操作。处理完毕,该Servlet根据Struts-config.xml配置转向到适当的JSP页面,将处理结果显示给用户。48/ModelAction对象封装了具体的处理逻辑,调用执行后把结果提交适宜的View组件并响应。ActionForm对象,可以通过定义属性描述客户端表单数据。开发者可派生子类并利用自定义标记库实现对客户端的表单数据的良好封装和支持,Action处理器对象可以直接对它进行读写。通过ActionForm组件对象实现了对View和Model之间交互的支持开发者自定义Bean,由Action调用,完成业务处理49/View通过JSP实现,Struts提供了自定义的标记库,可以非常好地和系统Model局部交互。通过使用自定义标记〔taglibraries〕创立的JSP表单,可以实现和Model局部中的ActionForm的映射,完成对用户数据的封装,同时这些自定义标记还提供了像模板定制等多种显示功能。50/Struts如何表达了MVC系统的特点?ActionServlet处理客户请求,利用配置的ActionMapping对象把请求映射到Action处理器对象进行处理。Action访问ActionForm中的数据,处理和响应客户请求,并调用后台Bean组件,执行业务逻辑;将处理结果通知ControllerController进行下一步处理,如确定后续显示页面等。51/Structs优缺点优点:1、Struts与Tomcat、Turbine等诸多Apache工程一样,是开源软件,使开发者能更深入地了解其内部的实现机制。2、Taglib和页面导航。灵活使用能大大提高开发的效率。缺点:1、增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,降低运行效率。2、视图与控制器间的过于紧密的连接。视图与控制器应试相互别离的,某些过于紧密的连接阻碍了它们的独立重用。3、视图对模型的低效率访问。依据模型操作接口的不同,视图可能需要屡次调用才能获得足够显示的数据。52/Spring框架7个模块组成。从整体提供了开发企业级应用所需要的一切。一般不必将系统完全建立在Spring框架上,可以自由选择适合自己的系统模块53/AOP模块O/R映射模块JDBC和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论