什么是 PureMVC 框架(提供下载)

PureMVC是在基础的经典模型、视图和控制器上建立的一个轻量级的应用框架,这种开源框架是免费的,它最初是执行的ActionScript 3语言使用的Adobe Flex、Flash和AIR,现在已经移植到几乎所有主要的发展平台,目前支持两个版本框架:标准和多核,总之,标准版提供了一种简单的编码分离的方法,按照MVC设计概念。除此之外,多版本允许多个PureMVC应用运行在同一个虚拟机;模块化编程

 

AS3版 PureMVC 下载地址:

http://puremvc.org/pages/downloads/AS3/PureMVC_AS3.zip

 

 

PureMVC框架概述与UML视图

docx文档下载地址:http://as3libs.googlecode.com/files/PureMVC.rar

框架概述

本文讨论PureMVC框架的类和接口,通过简单的UML(统一建模语言)图表阐述他们的作用、职责和合作。

PureMVC有一个非常狭隘的主要目标:用于帮助程序员分离代码为三个离散的层:即模型,视图和控制器。

在该经典的MVC元模式实现框架中,应用层有三个单例(一个只创建一次的类)所表示。而第四个单例,Façade类通过一个单一的接口为应用程序之间提供通讯,从而简化了开发。

模型(Model)简单的指向Proxy的引用。Proxy代码负责操作数据模型,与远程服务通信存取数据。

视图指向Mediator的引用。Mediator管理视图组件,增加事件监听器,操作视图组件的状态。

控制器包括命令类及其映射。命令类是无状态的,只有需要时才被创建。

Façade单例初始化Model, View, Controller,并且能访问各层类的Public方法。

 

Façade与核心类

 

Façade类令roxies, Mediators和Commands之间以松耦合的方式允许互相通信,而不需要导入或知道框架核心的存在。当我们创建一个Façade类具体的应用时,就可以“即开即用”的使用它了。附带的,与Façade类的交互将会最大化的降低开发者对API知识的了解程度。

核心成员类Model, View和Controller分别实现了IModel, IView 以及 IController 接口,Façade类实现了由核心接口组成的IFacade接口。

 

View, Mediators和View组件

 

View类被实现为一个用来缓存指向一个IMediator实例引用的单例。

Mediators类帮助我们创建或者重用已经存在的用户接口组件,而不用让他们通讯的PureMVC程序的知识去影响他们。具体的Mediators实例必须实现IMediator接口,通常是作为Mediator类的子类来实现的。

View视图用来显示数据和处理用户交互。在一个基于flash的应用程序中,他们通常通过使用事件和传递一些属性给其Mediators类去检查或者控制,以便与View的Mediators类交互。一个Mediator类通过View组件的数据与之建立联系。当一个Mediator 类的实例被view注册时,他会被假设为他需要获取通知。因此必须返回一个包含所有他感兴趣数据的通知名数组。

因为Mediator类必须实现IMediator接口,所以一个Mediator实例拥有handleNotification方法。当该实例被View组件注册,一个Observer实例就被创建并且被注册给每一个Notification的数组中。这样Mediator的handleNotification方法就被触发,而不论注册Notification的Mediator是否感兴趣。

Mediator类由于实现了INotifier接口而具备了sendNotification方法,sendNotification方法的参数是一个新的Notification通知,而后使用一个IFacade接口的单例去广播。

 

Mediator类的protected属性被初始化用于注册IFacade实例,并且因此Mediator必须在主程序初始化Façade实例后被注册。

 

Model, Proxies与数据对象

 

Model类被实现为一个简单的指向IProxy引用的单例。

Proxy类帮助我们暴露数据模型和实体类(当域逻辑和服务支持时)给应用程序,使得程序可以被其它地方被复用或重构。

我们可能通过使用一个Proxy实例来简化指向本地数据对象的管理,在这种情况下交互可能引起一些数据的同步操作。一个Proxy实例也可能被用来进行程序的原创服务操作,加载或者保持数据。这时,我们可能需要出发一个方法或者基于Proxy去设置数据,并且等待该Proxy从服务器成功加载到数据后广播一个Notification通知。

Proxy类由于实现了INotifier接口而具备了sendNotification方法,sendNotification方法的参数是一个新的Notification通知,而后使用一个IFacade接口的单例去广播。

Proxy类的protected属性被初始化用于注册IFacade实例,并且因此Mediator必须在主程序初始化Façade实例后被注册。

 

Controller与Commands

 

MacroCommand类从它的构造函数中触发initializeMacroCommand方法。使用者必须在其子类中重写initializeMacroCommand方法,一般addSubCommand方法添加所有Command。可以使用SimpleCommands 或者 MacroCommands中的任何一种。

 

View, Observer与Notification

 

Proxies,Mediators与Commands类之间的通讯是通过广播Notifications来实现松耦合和跨平台特性的:

Proxies可以发送,但不能接收Notification

Mediator声明感兴趣的Notification和接收Notification

Commands被触发或广播Notifications

PureMVC应用程序可能运行在不能访问Flash Event和EventDispatcher类的环境中,所以框架使用观察者模式以一种松耦合的方式在Model, View, Controller之间通信。

PureMVC使用观察者模式就是为了该目的。IObserver携带一个希望被关注(即“被关注的内容”)的对象引用,该对象的一个方法将会在INotification实例被广播(即“被关注方法”)时被触发。

View组件的职责是管理Notification的名称给Observer列表,以及当有Notification被发送时通知所有的Observers。

 

文章来源: 我要学flash网(www.51xflash.com) 原文地址:http://www.51xflash.com/article/flex/201107/04-14515.html

posted on 2012-04-22 13:03  ycty  阅读(501)  评论(0编辑  收藏  举报