《PureMVC设计模式(6页).doc》由会员分享,可在线阅读,更多相关《PureMVC设计模式(6页).doc(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-PureMVC设计模式-第 6 页AUTHOR: Cliff Hall LAST MODIFIED: 3/05/2008翻译:张启智 最后更新:2008/5/12目录PureMVC:框架的目标与优点1PureMVC框架概述1目标2优点2框架概述与UML视图3框架概述3Faade与核心类4View, Mediators and View组件4Model, Proxies与数据对象7Controller与Commands8View, Observer与Notification9接口11IFacade11IModel11IView11IController12IProxy12IMediator12
2、ICommand12IObserver13INotification13PureMVC:框架的目标与优点PureMVC框架概述PureMVC是一个轻量级框架,用于创建基于经典的模型-视图-控制器元模式的程序。该免费的开源框架可以应用于包括ActionScript 2、 ActionScript 3、Java、C#和其他一些流行的编程语言。他可以被部署在各种平台下,包括:l 移动环境:FlashLite, .NET Compact Framework, J2MEl 服务器环境:ColdFusion, J2EE, PHP, Pythonl 浏览器环境:Flash/Flex, JavaFX, Sil
3、verlightl 桌面环境.NET, AIR, FLASH, J2SE目标PureMVC有一个非常狭隘的主要目标:用于帮助程序员分离代码为三个离散的层:即模型,视图和控制器。完成这个目标,推出一个稳定的框架是本文的主要目的。而通过提供一些实例和工具来阐述本框架的作用是接下来的工作。其它一些最初是由ActionScript3文献推动的目标有:l 简单且实用的框架范围l 减少由应用层、类的作用、职责和组合造成的程序混乱l 平衡可维护性与可扩展性之间的关系l 提供清晰和完备的文献l 避免平台依赖性l 对开发者隐藏复杂性l 优秀的框架不需要持续的维护以推出新的特性优点框架的选择会严重影响到应用架构,
4、进而影响到成本维护等。所以需要慎重选择。使用PureMVC框架进行开发具备下列好处:1) 基于设计模式l 支持已经被时间所证明的设计模式,可以部署于任何具备支持面向对象的环境l 简单易懂2) 实用的实现接口的类l 框架是“即开即用”的,只需要很小的实现需求l Faade类提供了与核心类交互的框架3) 松耦合架构l 提供可复用的组件、模型数据对象和服务l 包含发布/订阅风格(注:观察者模式)的通知l 建立明确的分离客户端三层编码关系4) 面向接口的编程l 框架支持子类或实现接口的扩展l 对所有的框架类定义接口l 所有的类基于可扩展性思想,所有protected修饰的方法、属性、接口参数基于方法签
5、名l 框架支持将来通过其他类库以分组模式进行扩展,并且与核心包的模式互不依赖5) 完备的文档l 源代码免费开放l 完备的源代码文档l 概念和统一建模语言(UML)视图l 所有类和接口的单元测试l 大量的示例代码和入门教程l 由架构师撰写的术语阐述与最佳实践l 已有数千名学生测试专业课程框架概述与UML视图框架概述本文讨论PureMVC框架的类和接口,通过简单的UML(统一建模语言)图表阐述他们的作用、职责和合作。PureMVC有一个非常狭隘的主要目标:用于帮助程序员分离代码为三个离散的层:即模型,视图和控制器。在该经典的MVC元模式实现框架中,应用层有三个单例(一个只创建一次的类)所表示。而第
6、四个单例,Faade类通过一个单一的接口为应用程序之间提供通讯,从而简化了开发。l 模型(Model)简单的指向Proxy的引用。Proxy代码负责操作数据模型,与远程服务通信存取数据。l 视图指向Mediator的引用。Mediator管理视图组件,增加事件监听器,操作视图组件的状态。l 控制器包括命令类及其映射。命令类是无状态的,只有需要时才被创建。l Faade单例初始化Model, View, Controller,并且能访问各层类的Public方法。Faade与核心类Faade类令roxies, Mediators和Commands之间以松耦合的方式允许互相通信,而不需要导入或知道框
7、架核心的存在。当我们创建一个Faade类具体的应用时,就可以“即开即用”的使用它了。附带的,与Faade类的交互将会最大化的降低开发者对API知识的了解程度。核心成员类Model, View和Controller分别实现了IModel, IView 以及 IController 接口,Faade类实现了由核心接口组成的IFacade接口。View, Mediators and View组件View类被实现为一个用来缓存指向一个IMediator实例引用的单例。Mediators类帮助我们创建或者重用已经存在的用户接口组件,而不用让他们通讯的PureMVC程序的知识去影响他们。具体的Mediat
8、ors实例必须实现IMediator接口,通常是作为Mediator类的子类来实现的。View视图用来显示数据和处理用户交互。在一个基于flash的应用程序中,他们通常通过使用事件和传递一些属性给其Mediators类去检查或者控制,以便与View的Mediators类交互。一个Mediator类通过View组件的数据与之建立联系。当一个Mediator 类的实例被view注册时,他会被假设为他需要获取通知。因此必须返回一个包含所有他感兴趣数据的通知名数组。因为Mediator类必须实现IMediator接口,所以一个Mediator实例拥有handleNotification方法。当该实例被
9、View组件注册,一个Observer实例就被创建并且被注册给每一个Notification的数组中。这样Mediator的handleNotification方法就被触发,而不论注册Notification的Mediator是否感兴趣。Mediator类由于实现了INotifier接口而具备了sendNotification方法,sendNotification方法的参数是一个新的Notification通知,而后使用一个IFacade接口的单例去广播。Mediator类的protected属性被初始化用于注册IFacade实例,并且因此Mediator必须在主程序初始化Faade实例后被注
10、册。Model, Proxies与数据对象Model类被实现为一个简单的指向IProxy引用的单例。Proxy类帮助我们暴露数据模型和实体类(当域逻辑和服务支持时)给应用程序,使得程序可以被其它地方被复用或重构。我们可能通过使用一个Proxy实例来简化指向本地数据对象的管理,在这种情况下交互可能引起一些数据的同步操作。一个Proxy实例也可能被用来进行程序的原创服务操作,加载或者保持数据。这时,我们可能需要出发一个方法或者基于Proxy去设置数据,并且等待该Proxy从服务器成功加载到数据后广播一个Notification通知。Proxy类由于实现了INotifier接口而具备了sendNot
11、ification方法,sendNotification方法的参数是一个新的Notification通知,而后使用一个IFacade接口的单例去广播。Proxy类的protected属性被初始化用于注册IFacade实例,并且因此Mediator必须在主程序初始化Faade实例后被注册。Controller与CommandsMacroCommand类从它的构造函数中触发initializeMacroCommand方法。使用者必须在其子类中重写initializeMacroCommand方法,一般addSubCommand方法添加所有Command。可以使用SimpleCommands 或者 M
12、acroCommands中的任何一种。View, Observer与NotificationProxies,Mediators与Commands类之间的通讯是通过广播Notifications来实现松耦合和跨平台特性的:l Proxies可以发送,但不能接收Notificationl Mediator声明感兴趣的Notification和接收Notificationl Commands被触发或广播NotificationsPureMVC应用程序可能运行在不能访问Flash Event和EventDispatcher类的环境中,所以框架使用观察者模式以一种松耦合的方式在Model, View, Controller之间通信。PureMVC使用观察者模式就是为了该目的。IObserver携带一个希望被关注(即“被关注的内容”)的对象引用,该对象的一个方法将会在INotification实例被广播(即“被关注方法”)时被触发。View组件的职责是管理Notification的名称给Observer列表,以及当有Notification被发送时通知所有的Observers。接口IFacadeIModelIViewIControllerIProxyIMediatorICommand INotifierIObserverINotification