实现
术语阐述
及
最佳实践
用 PureMVC 创建健壮、易扩展、易维护的客户端程序
附 ActionScript 3 及 MXML 实例
作者
翻译: 张泽远 <51ajax.net@gmail.com>
Tamt <www.itamt.cn>
最后更新: 5/19/2008
: Cliff Hall <cliff@puremvc.org>
PureMVC 是 Futurescale 公司创建并维护的开源自由的程序框架。Futurescale, Inc. Copyright © 2006-08, Some rights
reserved。使用 PureMVC 必须遵守美国 Creative Commons 3.0 Attribution 协议。PureMVC、本文档以及任何从
Futurescale 网站下载的文档、培训资料及示例代码,都不提供任何明示或者默示的担保,包括但是不限于是否符合特定的
目的、未侵害他人权利的担保。
Page 2 of 44 5/20/2008 11:17 PM
PureMVC 结构 4
• Model 与 Proxy 4
• View 与 Mediator 4
• Controller 与 Command 4
• Façade 与 Core 5
• Observer 与 Notification 5
• Notification可以被用来触发Command的执行 5
• Mediator发送、声明、接收Notification 6
• Proxy发送,但不接收Notification 6
Façade 7
• 具体Façade是什么样子的? 7
• 为程序创建Façade 7
• 初始化Façade 10
Notification 12
• Event与Notification 12
• 定义Notification和Event常量 13
Command 14
• SimpleCommand和MacroCommand的使用 15
• 降低Command与Mediator, Proxy的耦合度 15
• 复杂的操作与业务逻辑 16
PureMVC 是 Futurescale 公司创建并维护的开源自由的程序框架。Futurescale, Inc. Copyright © 2006-08, Some rights
reserved。使用 PureMVC 必须遵守美国 Creative Commons 3.0 Attribution 协议。PureMVC、本文档以及任何从
Futurescale 网站下载的文档、培训资料及示例代码,都不提供任何明示或者默示的担保,包括但是不限于是否符合特定的
目的、未侵害他人权利的担保。
Page 3 of 44 5/20/2008 11:17 PM
Mediator 21
• Mediator的职责 21
• 转化View Component类型 22
• 监听并响应View Component 23
• 在Mediator里处理Notification 25
• Mediator和Proxy之间、Mediator和其他Mediator之间的耦合 27
• 用户与View Component和Mediator的交互 28
Proxy 33
• Proxy的职责 34
• 转换数据对象 34
• 避免对Mediator的依赖 36
• 封装域逻辑 37
• 与Remote Proxy通信 38
启示
PureMVC 是一个定位于设计高性能 RIA 客户端的基于模式
的框架。现在它已经被移植到其他的平台上,包括服务器
端环境。本篇文档论述针对于客户端。
PureMVC 在不同平台语言下的阐述、实现,PureMVC 所
使用的模式在“四人帮”的《设计模式:可复用面向对象
软件的基础》一书中有很好的论述。
强烈推荐。
PureMVC 是 Futurescale 公司创建并维护的开源自由的程序框架。Futurescale, Inc. Copyright © 2006-08, Some rights
reserved。使用 PureMVC 必须遵守美国 Creative Commons 3.0 Attribution 协议。PureMVC、本文档以及任何从
Futurescale 网站下载的文档、培训资料及示例代码,都不提供任何明示或者默示的担保,包括但是不限于是否符合特定的
目的、未侵害他人权利的担保。
Page 4 of 44 5/20/2008 11:17 PM
PureMVC 结构
PureMVC框架的目标很明确,即把程序分为低耦合的三层:Model、View和
Controller。
降低模块间的耦合性,各模块如何结合在一起工作对于创建易扩展,易维护的应用
程序是非常重要的。
在PureMVC实现的经典MVC元设计模式中,这三部分由三个单例模式类管理,分
别是Model、View和Controller。三者合称为核心层或核心角色。
PureMVC中还有另外一个单例模式类——Façade,Façade提供了与核心层通信
的唯一接口,以简化开发复杂度。
Model 与 Proxy
Model 保存对 Proxy 对象的引用,Proxy 负责操作数据模型,与远程服务通
信存取数据。
这样保证了 Model 层的可移植性。
View 与 Mediator
View 保存对 Mediator 对象的引用 。由 Mediator 对象来操作具体的视图组
件(View Component,例如 Flex 的 DataGrid 组件),包括:添加事件监
听器 ,发送或接收 Notification ,直接改变视图组件的状态。
这样做实现了把视图和控制它的逻辑分离开来。
Controller 与 Command
Controller 保存所有 Command 的映射。Command 类是无状态的,只在需
要时才被创建。
PureMVC 是 Futurescale 公司创建并维护的开源自由的程序框架。Futurescale, Inc. Copyright © 2006-08, Some rights
reserved。使用 PureMVC 必须遵守美国 Creative Commons 3.0 Attribution 协议。PureMVC、本文档以及任何从
Futurescale 网站下载的文档、培训资料及示例代码,都不提供任何明示或者默示的担保,包括但是不限于是否符合特定的
目的、未侵害他人权利的担保。
Page 5 of 44 5/20/2008 11:17 PM
PureMVC 结构
Controller 与 Command
Command 可以获取 Proxy 对象并与之交互,发送 Notification,执行其他
的 Command。经常用于复杂的或系统范围的操作,如应用程序的“启动”和
“关闭”。应用程序的业务逻辑应该在这里实现。
Façade 与 Core
Façade 类应用单例模式,它负责初始化核心层(Model, View 和
Controller),并能访问它们的 Public 方法。
这样,在实际的应用中,你只需继承 Façade 类创建一个具体的 Façade 类就
可以实现整个 MVC 模式,并不需要在代码中导入编写 Model,View 和
Controller 类。
Proxy、Mediator 和 Command 就可以通过创建的 Façade 类来相互访问通
信。
Observer 与 Notification
PureMVC 的通信并不采用 Flash 的 EventDispatcher/Event ,因为
PureMVC 可能运行在没有 Flash Event 和 EventDispatcher 类的环境中,
它的通信是使用观察者模式以一种松耦合的方式来实现的。
你可以不用关心 PureMVC 的 Observer/Notification 机制是怎么实现的,它
已经在框架内部实现了。你只需要使用一个非常简单的方法从 Proxy,
Mediator, Command 和 Facade 发送 Notification,甚至不需要创建一个
Notification 实例。
Notification可以被用来触发Command的执行
Facade 保存了 Command 与 Notification 之间的映射。当 Notification(通知)被