Flash/Flex 框架简介—PureMVC
2010-07-01 23:43
239 查看
简介
此框架比较有名,用的人也应该比较多,所以比较成熟,里面的思路也比较清晰,使用本身实现的消息机制,不依附于as的事件驱动,故此有很多种语言的版本。一. 思路
1.参考资料列举一下pureMVC里面使用到的设计模式以,可以先略过,后面涉及到再回过来查看即可.都是书本的定义, google一下会有很多资料.
命令模式(command):
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;
对请求排队或记录请求日志,以及支持可撤销的操作。
观察者模式(Publish/Subscribe):
定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
代理模式(proxy):
为其他对象提供一种代理以控制对这个对象的访问.
外观模式(facadee):
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
中介者模式(Mediator):
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。
2.框架思路及其执行流程简述
pureMVC顾名思义采用了mvc的架构,将系统分为三层,其操作逻辑层主要由command实现,持久层由proxy来实现与服务器交互及客户端缓存数据,视图层由mediator封装,有利于逻辑划分视图模块,封装视图组件之间的交互。
其三层的通信采用框架本身采用Publish/Subscribe方式实现的事件机制来驱动,并由facade统筹三层在框架实际使用中的实现。
总的来说,pureMVC思路清晰,而且采用了框架本身的消息机制,并没有打乱as本身的事件驱动,两种事件机制融合运用,设计得当的话应该是可以做出解耦的很好的系统。但在实际使用中pureMVC的确也存在不少问题,譬如command模式导致零散的command类增多,有点不切实际,mediator过重等,但目前还没有其他更好的思路替代,所以大多数的as项目都有采用puremvc框架或者采用其类似的思路。
3.源码分析
Puremvc的源码目录结构也十分清晰。
interfaces里面是一些接口,接口的名称已经使人望名知意了,使用者可以实现这些接口来完成自己定制的功能,后面会考虑带出一点思路,这里暂不做叙述。
Pattens里面是上面说到的几个设计模式的实现,我们将从这个目录说起,并且联合core里面对mvc架构具体实现的内容,对puremvc的源码进行一下分析。(对下面列举的模式有疑惑的同学,请参考一下上面提过一下的模式简介,或者google一下)
Command
在puremvc里面提供了2种command,分别为SimpleCommand和MacroCommand,显然SimpleCommand是对应一个消息进行的处理,在创建具体的commmand的时候需要覆盖SimpleCommand的execute方法,而MacroCommand则是加载了一个SimpleCommand的队列,按先进先出的顺序执行队列中的SimpleCommand.无论是SimpleCommand和MacroCommand都需实现Icommand接口的execute方法,以便在控制器中能有统一的方法来执行逻辑操作。
MacroCommand的execute方法:
代码
public function registerMediator( mediator:IMediator ) : void{ // do not allow re-registration (you must to removeMediator fist) if ( mediatorMap[ mediator.getMediatorName() ] != null ) return; // Register the Mediator for retrieval by name mediatorMap[ mediator.getMediatorName() ] = mediator; // Get Notification interests, if any. var interests:Array = mediator.listNotificationInterests(); // Register Mediator as an observer for each of its notification interests if ( interests.length > 0 ) { // Create Observer referencing this mediator's handlNotification method var observer:Observer = new Observer( mediator.handleNotification, mediator ); // Register Mediator as Observer for its list of Notification interests for ( var i:Number=0; i< interests.length; i++ ) { registerObserver( interests[i], observer ); } } // alert the mediator that it has been registered mediator.onRegister(); }
相关文章推荐
- Flash WebGame 开发经验心得和PureMVC框架细说
- Flash/Flex/AIR:Flex简介
- flash框架---PureMvc 实践
- Flash/Flex/AIR:Flex简介
- Flex pureMVC 框架的使用
- 基于Pipe的PureMVC Flex框架的多核共享消息技术
- [转]Flash、Flex、AS3.0框架及类库资源收集之十全大补
- Flex利用PureMVC框架实现页面跳转
- flex框架pureMVC的使用:第一步
- Flash WebGame 开发经验心得和PureMVC框架细说(转载)
- flex框架pureMVC的使用
- 基于Pipe的PureMVC FLEX框架的多核共享消息技术
- Flash/Flex/AIR:Flex简介
- Flex,Flash资源库的简介与内容
- flex框架pureMVC的使用
- flex框架pureMVC的使用:第一步(转经典)
- flex框架pureMVC的使用:第一步
- 基于Pipe的PureMVC Flex框架的多核共享消息技术
- 基于Pipe的PureMVC Flex框架的多核共享消息技术
- Flash WebGame 开发经验心得和PureMVC框架细说