MVC体系结构.ppt

上传人:s****8 文档编号:67352279 上传时间:2022-12-24 格式:PPT 页数:45 大小:1.13MB
返回 下载 相关 举报
MVC体系结构.ppt_第1页
第1页 / 共45页
MVC体系结构.ppt_第2页
第2页 / 共45页
点击查看更多>>
资源描述

《MVC体系结构.ppt》由会员分享,可在线阅读,更多相关《MVC体系结构.ppt(45页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、MVC体系结构南京大学软件学院20091MVC体系结构MVC基本概念及应用领域MVC主体结构MVC动态特征MVC实现软件体系结构、框架与设计模式观察者(Observer)设计模式应用实例MVC基本概念:模型-视图-控制器(1)MVC(Model-View-Controller)将一个交互式应用程序分成3个组件模型:包含核心功能和数据(核心业务逻辑)视图:向用户显示信息控制器:处理用户输入变更-传播机制保证了模型和用户界面之间的一致性(图形用户界面)MVC基本概念:模型-视图-控制器(2)目的将人机交互从核心功能中分离出来(M)模型对用户来说是透明的,用户只需要观察视图(V)用户与模型的交互通过

2、控制器提供的安全方法来实现(C)MVC应用领域具有灵活人-机界面的交互式应用程序可以灵活选择不同的信息显示方式可以灵活选择用户的输入方式针对不同的用户角色,提供不同的用户界面不同用户具有不同权限,操作的方式也有所不同MVC体系结构MVC基本概念及应用领域MVC主体结构MVC动态特征MVC实现软件体系结构、框架与设计模式观察者(Observer)设计模式应用实例模型(Model)封装了内核功能和数据业务逻辑(软件的核心)数据以及访问它们的函数(视图组件使用)执行特定应用程序处理的过程(控制器代表用户调用)模型对于用户来说是不可见的(M与V独立)模型独立于特定输出表示或者输入方式(M与C独立)用户

3、只能通过控制器操作模型(C是M与V之间的桥梁)变更-传播机制(1)一个模型可对应多个视图如果用户通过一个视图的控制器改变了模型中的数据,那么依赖于该数据的其他视图也应该反映出这样的变化一旦模型的数据发生了变化,模型需要通知所有相关的视图做出相应的变化维护数据的一致性变更-传播机制(2)工作原理:模型维护了一个表所有视图还有一些控制器在这个表中登记了对变更通知的需求模型状态的改变将触发变更-传播机制,每个在表中登记的视图和控制器都会收到变更通知这样的方式可以通过观察者(Observer)设计模式完成视图(View)向用户显示信息不同的视图使用不同的方法呈现信息每个视图组件都有一个更新函数,这个函

4、数被模型变更通知激活这个函数被激活(此时模型已经改变)后,将使得视图重新和模型一致在初始化阶段,视图向模型登记请求变更通知(表)从模型获得数据通过状态查询函数实现例如:定时刷新控制器(Controller)每个视图有一个相关的控制器组件(一一对应)控制器组件接受事件,并翻译成输入事件如何发送到控制器由用户界面平台决定事件被翻译成为对模型或者视图的请求如果控制器的行为依赖于模型的状态,那么控制器也需要向模型登记请求变更通知例如:用户点击按钮,按钮的事件响应函数将采取相应的措施处理用户要求用户仅仅通过控制器与系统交互MVC组件类型的关系和功能注意视图与控制器是一一对应的关系模型与视图是一对多的关系

5、变更-传播机制保持模型与视图、控制器之间状态的一致性MVC体系结构MVC基本概念及应用领域MVC主体结构MVC动态特征MVC实现软件体系结构、框架与设计模式观察者(Observer)设计模式应用实例动态特征(1):MVC系统的初始化过程Main programModelViewControllermodelviewmodel,viewcontrollerstart动态特征(2):MVC系统的初始化过程创建模型实例,并初始化其数据创建视图对象,并用对模型的引用作为初始化参数之一视图通过调用附属过程支持变更-传递机制视图创建控制器,此时将模型和视图的引用作为参数传递给控制器初始化过程控制器通过调用

6、附属过程来支持变更-传递机制初始化完成,应用程序开始处理事件动态特征(3):输入导致模型变化,并触发变更-传递机制notifyhandleEventControllerViewModelserviceupdateupdategetDatagetDatadisplay动态特征(4):输入导致模型变化,并触发变更-传递机制控制器接受到事件,解释事件并且启动模型的服务过程(handleEvent、service)模型执行相应的过程,并导致内部状态的变化(notify)模型调用其更新过程,向所有登记请求了变更-传播机制的视图和控制器发出通知(update)每个视图从模型中读取新数据并且重新显示(get

7、Data)每个控制器修改自己的行为,比如禁用某个功能最初的控制器恢复控制并从事件处理过程返回MVC体系结构MVC基本概念及应用领域MVC主体结构MVC动态特征MVC实现软件体系结构、框架与设计模式观察者(Observer)设计模式应用实例MVC实现(1)设计并实现模型组件封装内核所需要的数据和功能确定模型的哪一部分应该通过控制器向用户显示,提供访问待显示数据的功能实现核心业务逻辑MVC实现(2)实现变更-传播机制采用观察者(Observer)设计模式每个视图和需要观察模型变更的控制器都在模型中注册自己的观察者(表)模型中可以随意添加和删除观察者实现通知各观察者并改变其状态的方法MVC实现(3)

8、设计并实现视图设计视图的外观,并实现画图过程来将视图显示在屏幕上(需要使用用户界面平台的功能)实现更新过程来反映模型的变化可以简单地调用画图功能,但是不适应模型频繁变化的情况向更新过程提供一些参数来确定是否重画,以及重画范围可以通过累积变化的方式减少重画的频率还需要实现视图的初始化过程支持变更-传递机制初始化控制器MVC实现(4)设计并实现控制器对于每个视图,指定回应用户动作的系统行为控制器用一个专用的过程来接受并且解释这些用户动作(事件)实现事件响应函数MVC实现(5)实现MVC的总体的初始化部分首先创建并初始化模型实例创建和初始化视图实例同时会创建相应的控制器实例初始化之后进入一个循环,或

9、者包含循环的过程MVC体系结构MVC基本概念及应用领域MVC主体结构MVC动态特征MVC实现软件体系结构、框架与设计模式观察者(Observer)设计模式应用实例软件体系结构:Architecture(1)迄今为止还没有一个被大家所公认的定义确定了系统整体结构、层次划分以及不同部分之间的协作等设计考虑是软件设计过程中的第一个层次,常用于总体设计MVC是一种软件体系结构软件体系结构:Architecture(2)Kruchten指出,软件体系结构有四个角度,它们从不同方面对系统进行描述概念角度:描述系统的主要构件及它们之间的关系模块角度:包含功能分解与层次结构运行角度:描述了一个系统的动态结构代

10、码角度:描述了各种代码和库函数在开发环境中的组织框架:Framework框架不是现成可用的应用系统,而是一个半成品,需要后来的开发人员进行二次开发,实现体功能的应用系统框架构成了通用的、具有一般性的系统主体部分,二次开发人员只是像做填空一样,根据具体业务,完成特定应用系统中与众不同的特殊部分框架比体系结构更具体,更偏重于技术一般来说,确定框架后,软件体系结构也随之确定,而对于同一软件体系结构(比如Struts是基于Web的MVC框架),可以通过多种框架来实现MVC不是框架设计模式:Design Pattern设计模式研究的是单一设计问题的解决方法构思如何组合已有的组件,使其发挥出最大的功效描述

11、问题中出现的类和接口,以及它们之间的关系只是思想,不是代码可由不同语言实现,提高代码的可重用性MVC不是设计模式MVC体系结构MVC基本概念及应用领域MVC主体结构MVC动态特征MVC实现软件体系结构、框架与设计模式观察者(Observer)设计模式应用实例观察者(Observer)设计模式:通知状态变化(1)需求有多个类的状态依赖于一个主类的状态变化解决方案多个类作为观察者,主类作为被观察者设计一个观察者接口,其中包含一个更新方法,所有观察者都实现该接口在主类中保存一个观察者队列,存放所有观察者对象一旦主类状态发生变化,就通知观察者队列改变相应类的状态观察者(Observer)设计模式:通知

12、状态变化(2)观察者(Observer)设计模式:通知状态变化(3)Observer的设计接口:每个具体的观察者子类都必须实现自己的更新方法抽象类:更新方法为抽象,但有一些其它方法是所有观察者子类所共有,可以在基类中实现具体基类:基类中实现默认的更新方法,需要自己独特的更新方法的子类覆盖基类的更新方法观察者(Observer)设计模式:通知状态变化(4)每当新建一个观察者(Observer)时,就要将它注册(addObserver方法)给被观察者(Subject)一旦被观察者(Subject)的状态发生变化,就必须通知(notifyObservers方法)所有观察者(Observer)通知的同

13、时,notifyObservers方法循环调用所有观察者的update方法,更新观察者MVC体系结构MVC基本概念及应用领域MVC主体结构MVC动态特征MVC实现软件体系结构、框架与设计模式观察者(Observer)设计模式应用实例应用实例(1)需求有两个窗口,每个窗口分别有一个标签和一个按钮点击其中一个窗口中的按钮,可以使标签的字体增大,点击另一个可以使其字体减小一个窗口对字体的改变必须立即反映在另一个窗口中目的采用MVC模式设计实现使用观察者(Observer)设计模式模拟变更-传播机制应用实例(2):类图应用实例(3):Observer接口interface Observer/更新函数p

14、ublic void update();应用实例(4):M类class M private int size=20;/字体大小/使字体变大 public void enlarge()this.setSize(this.getSize()+5);/使字体变小public void abridge()this.setSize(this.getSize()-5);应用实例(5):M类/观察者队列private List observers=new ArrayList();public void addObservers(Observer observer)this.observers.add(obs

15、erver);/当模型有变更时,通知所有观察者改变相应的视图public void notifyObservers()Iterator iter=this.observers.iterator();while(iter.hasNext()iter.next().update();应用实例(6):C1类class C1 implements ActionListener/一个控制器与一个视图和一个模型对应private V1 v1;private M m;/构造函数public C1(V1 v1,M m)this.m=m;this.v1=v1;/向模型注册此控制器对应的视图的观察者public

16、void register()this.m.addObservers(this.v1);应用实例(7):C1类/*实现事件监听器,*当点击按钮时,增大标签的字体*/public void actionPerformed(ActionEvent e)this.m.enlarge();this.m.notifyObservers();应用实例(8):V1类class V1 implements Observer JLabel label=new JLabel(MVC);JButton button=new JButton(增大字体);private C1 c1;/与视图V1对应的控制器/实现Obs

17、erver接口,当有变更时,改变相应视图public void update()Font font=new Font(this.label.getText(),c1.getM().getStyle(),c1.getM().getSize();this.label.setFont(font);应用实例(9):V1类public V1(M m)/实例化一个链接此视图和模型的控制器c1=new C1(this,m);/注册此视图的观察者到模型中c1.register();应用实例(10):主程序TestC2与V2的实现与C1和V1的实现相似public class Test/*param args*/public static void main(String args)M m=new M();V1 v1=new V1(m);V2 v2=new V2(m);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com