编辑: 达达恰西瓜 2018-11-04
MVC体系结构 南京大学软件学院2009 * MVC体系结构 MVC基本概念及应用领域MVC主体结构MVC动态特征MVC实现软件体系结构、框架与设计模式观察者(Observer)设计模式应用实例 MVC基本概念:模型-视图-控制器(1) MVC(Model-View-Controller)将一个交互式应用程序分成3个组件模型:包含核心功能和数据 (核心业务逻辑)视图:向用户显示信息控制器:处理用户输入变更-传播机制保证了模型和用户界面之间的一致性 (图形用户界面) MVC基本概念:模型-视图-控制器(2) 目的将人机交互从核心功能中分离出来(M) 模型对用户来说是透明的,用户只需要观察视图(V)用户与模型的交互通过控制器提供的安全方法来实现(C) MVC应用领域 具有灵活人-机界面的交互式应用程序可以灵活选择不同的信息显示方式可以灵活选择用户的输入方式针对不同的用户角色,提供不同的用户界面不同用户具有不同权限,操作的方式也有所不同 MVC体系结构 MVC基本概念及应用领域MVC主体结构MVC动态特征MVC实现软件体系结构、框架与设计模式观察者(Observer)设计模式应用实例 模型(Model) 封装了内核功能和数据业务逻辑(软件的核心)数据以及访问它们的函数(视图组件使用)执行特定应用程序处理的过程(控制器代表用户调用)模型对于用户来说是不可见的(M与V独立)模型独立于特定输出表示或者输入方式(M与C独立)用户只能通过控制器操作模型(C是M与V之间的桥梁) 变更-传播机制(1) 一个模型可对应多个视图如果用户通过一个视图的控制器改变了模型中的数据,那么依赖于该数据的其他视图也应该反映出这样的变化一旦模型的数据发生了变化,模型需要通知所有相关的视图做出相应的变化维护数据的一致性 变更-传播机制(2) 工作原理:模型维护了一个表所有视图还有一些控制器在这个表中登记了对变更通知的需求模型状态的改变将触发变更-传播机制,每个在表中登记的视图和控制器都会收到变更通知这样的方式可以通过观察者(Observer)设计模式完成 视图(View) 向用户显示信息不同的视图使用不同的方法呈现信息每个视图组件都有一个更新函数,这个函数被模型变更通知激活这个函数被激活(此时模型已经改变)后,将使得视图重新和模型一致在初始化阶段,视图向模型登记请求变更通知(表)从模型获得数据通过状态查询函数实现例如:定时刷新 控制器(Controller) 每个视图有一个相关的控制器组件(一一对应)控制器组件接受事件,并翻译成输入事件如何发送到控制器由用户界面平台决定事件被翻译成为对模型或者视图的请求如果控制器的行为依赖于模型的状态,那么控制器也需要向模型登记请求变更通知例如:用户点击按钮,按钮的事件响应函数将采取相应的措施处理用户要求用户仅仅通过控制器与系统交互 MVC组件类型的关系和功能 注意 视图与控制器是一一对应的关系模型与视图是一对多的关系变更-传播机制保持模型与视图、控制器之间状态的一致性 MVC体系结构 MVC基本概念及应用领域MVC主体结构MVC动态特征MVC实现软件体系结构、框架与设计模式观察者(Observer)设计模式应用实例 动态特征(1):MVC系统的初始化过程 Main program Model View Controller model view model,view controller start 动态特征(2):MVC系统的初始化过程 创建模型实例,并初始化其数据创建视图对象,并用对模型的引用作为初始化参数之一视图通过调用附属过程支持变更-传递机制视图创建控制器,此时将模型和视图的引用作为参数传递给控制器初始化过程控制器通过调用附属过程来支持变更-传递机制初始化完成,应用程序开始处理事件 动态特征(3):输入导致模型变化,并触发变更-传递机制 notify handleEvent Controller View Model service update update getData getData display 动态特征(4):输入导致模型变化,并触发变更-传递机制 控制器接受到事件,解释事件并且启动模型的服务过程(handleEvent、 service)模型执行相应的过程,并导致内部状态的变化(notify)模型调用其更新过程,向所有登记请求了变更-传播机制的视图和控制器发出通知(update)每个视图从模型中读取新数据并且重新显示(getData)每个控制器修改自己的行为,比如禁用某个功能最初的控制器恢复控制并从事件处理过程返回 MVC体系结构 MVC基本概念及应用领域MVC主体结构MVC动态特征MVC实现软件体系结构、框架与设计模式观察者(Observer)设计模式应用实例 MVC实现(1) 设计并实现模型组件封装内核所需要的数据和功能确定模型的哪一部分应该通过控制器向用户显示,提供访问待显示数据的功能实现核心业务逻辑 MVC实现(2) 实现变更-传播机制采用观察者(Observer)设计模式每个视图和需要观察模型变更的控制器都在模型中注册自己的观察者(表)模型中可以随意添加和删除观察者实现通知各观察者并改变其状态的方法 MVC实现(3) 设计并实现视图设计视图的外观,并实现画图过程来将视图显示在屏幕上(需要使用用户界面平台的功能)实现更新过程来反映模型的变化可以简单地调用画图功能,但是不适应模型频繁变化的情况向更新过程提供一些参数来确定是否重画,以及重画范围可以通过累积变化的方式减少重画的频率还需要实现视图的初始化过程支持变更-传递机制初始化控制器 MVC实现(4) 设计并实现控制器对于每个视图,指定回应用户动作的系统行为控制器用一个专用的过程来接受并且解释这些用户动作(事件)实现事件响应函数 MVC实现(5) 实现MVC的总体的初始化部分首先创建并初始化模型实例创建和初始化视图实例同时会创建相应的控制器实例初始化之后进入一个循环,或者包含循环的过程 MVC体系结构 MVC基本概念及应用领域MVC主体结构MVC动态特征MVC实现软件体系结构、框架与设计模式观察者(Observer)设计模式应用实例 软件体系结构:Architecture(1) 迄今为止还没有一个被大家所公认的定义确定了系统整体结构、层次划分以及不同部分之间的协作等设计考虑是软件设计过程中的第一个层次,常用于总体设计MVC是一种软件体系结构 软件体系结构:Architecture(2) Kruchten指出,软件体系结构有四个角度,它们从不同方面对系统进行描述概念角度:描述系统的主要构件及它们之间的关系模块角度:包含功能分解与层次结构运行角度:描述了一个系统的动态结构代码角度:描述了各种代码和库函数在开发环境中的组织 框架:Framework 框架不是现成可用的应用系统,而是一个半成品,需要后来的开发人员进行二次开发,实现体功能的应用系统框架构成了通用的、具有一般性的系统主体部分,二次开发人员只是像做填空一样,根据具体业务,完成特定应用系统中与众不同的特殊部分框架比体系结构更具体,更偏重于技术一般来说,确定框架后,软件体系结构也随之确定,而对于同一软件体系结构(比如Struts是基于Web的MVC框架),可以通过多种框架来实现MVC不是框架 设计模式:Design Pattern 设计模式研究的是单一设计问题的解决方法构思如何组合已有的组件,使其发挥出最大的功效描述问题中出现的类和接口,以及它们之间的关系只是思想,不是代码可由不同语言实现,提高代码的可重用性MVC不是设计模式 MVC体系结构 MVC基本概念及应用领域MVC主体结构MVC动态特征MVC实现软件体系结构、框架与设计模式观察者(Observer)设计模式应用实例 观察者(Observer)设计模式:通知状态变化(1) 需求有多个类的状态依赖于一个主类的状态变化解决方案多个类作为观察者,主类作为被观察者设计一个观察者接口,其中包含一个更新方法,所有观察者都实现该接口在主类中保存一个观察者队列,存放所有观察者对象一旦主类状态发生变化,就通知观察者队列改变相应类的状态 观察者(Observer)设计模式:通知状态变化(2) 观察者(Observer)设计模式:通知状态变化(3) Observer的设计接口:每个具体的观察者子类都必须实现自己的更新方法抽象类:更新方法为抽象,但有一些其它方法是所有观察者子类所共有,可以在基类中实现具体基类:基类中实现默认的更新方法,需要自己独特的更新方法的子类覆盖基类的更新方法 观察者(Observer)设计模式:通知状态变化(4) 每当新建一个观察者(Observer)时,就要将它注册(addObserver方法)给被观察者(Subject)一旦被观察者(Subject)的状态发生变化,就必须通知(notifyObservers方法) 所有观察者(Observer)通知的同时,notifyObservers方法循环调用所有观察者的update方法,更新观察者 MVC体系结构 MVC基本概念及应用领域MVC主体结构MVC动态特征MVC实现软件体系结构、框架与设计模式观察者(Observer)设计模式应用实例 应用实例(1) 需求有两个窗口,每个窗口分别有一个标签和一个按钮点击其中一个窗口中的按钮,可以使标签的字体增大,点击另一个可以使其字体减小一个窗口对字体的改变必须立即反映在另一个窗口中目的采用MVC模式设计实现使用观察者(Observer)设计模式模拟变更-传播机制 应用实例(2):类图 应用实例(3):Observer接口 interface Observer {//更新函数public void update();

} 应用实例(4):M类class M {private int size = 20;

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题