PureMVC(AS3)备忘

推荐PureMVC结构

推荐目录结构(图为连连看例子的目录结构)

推荐目录结构为,按MVC分为3个目录:modelviewcontrollerModel下面有定义vo的子目录,view下面有定义UI界面的子目录ui等,controller下面有定义初始化的子命令目录boostraps。实际项目中的基本上每个功能模块,在三个目录下对应的类。

详解:

PureMVC框架的入口是继承Façade的子类:ApplicationFacade,startUp()方法启动初始化框架。

ApplicationFacade类:

      public class ApplicationFacadeextends Facadeimplements IFacade

         {

                   private static const STARTUP:String = "startup";

                  

                   public static function getInstance():ApplicationFacade

                   {

                            if (instance == null)

                                     instance = new ApplicationFacade();

                            return instance as ApplicationFacade;

                   }

                  

                   override protected functioninitializeController():void

                   {

                            super.initializeController();

                           registerCommand(STARTUP, StartupCommand);

                   }

                  

                   public functionstartUp(rootView:DisplayObjectContainer):void

                   {

                            sendNotification(STARTUP, rootView);

                            removeCommand(STARTUP); //PureMVC初始化完成,注销STARUP命令

                   }

1、ApplicationFacade类对象负责初始化Controller(控制器),建立CommandNotification名之间的映射。

2、ApplicationFacade类仅定义Notification(通知)常量:STARTUPprivate),标识应用程序启动,其它Notification(通知)常量抽离到ApplicationConstants中定义,这样更简洁、清晰。

3、为了使ApplicationFacade结构更清晰,简洁。将注册CommandProxyView&Mediator的工作抽离到BootstrapCommandsBootstrapModelsBootstrapViewMediators去做。

  BootstrapCommands:初始化应用程序事件与Command之间的映射关系;

  BootstrapModelsModel初始化,初始化应用程序启动过程中需要用到的Proxy,并注册;

  BootstrapViewMediatorsView初始化,唯一创建并注册ApplicationMediator,它包含其他所有View Component并在启动时创建它们。

调用startUp()启动应用程序,发送STARTUP命令;然后触发StartupCommand,它包含三个子command执行(这里借鉴Robotlegs的思想,将CommandModelViewMediator初始化工作分离,使得程序结构更清晰。)

StartupCommand包含3个子命令BootstrapCommandsBootstrapModelsBootstrapViewMediators

框架初始化流程可以表示如下:


模块通信图

1、Command需要侦听通知,需要在framework.controller.boostraps.BootstrapCommands中使用registerCommand注册;

2、一般一个Mediator(handleNotification方法)处理的Notification应该在4、5个之内。如果处理的Notification很多,则意味着Mediator需要被拆分,在拆分后的子模块的Mediator里处理要比全部放在一起更好。

3、应该避免Mediator与Proxy 直接交互。可以适当是的在Mediator中facade.retrieveProxy获取Proxy然后拿到数据,而且从proxy直接拿数据,可以保证拿到最新数据。

相关知识借鉴了http://www.cnblogs.com/skynet/archive/2013/01/29/2881244.html,在此表示感谢。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值