如何在PureMVC flex应用程序中执行重复操作?

时间:2012-01-25 02:56:03

标签: actionscript-3 flex air puremvc

目前正在开发基于PureMVC框架的flex AIR项目。对项目有一个新的要求,一个操作将定期重复执行,具有一些业务逻辑。根据PureMVC,这应该放在命令中,但是命令会在执行时收集垃圾。

鉴于这种情况,很少有疑惑/混淆/澄清......

  1. 使用业务逻辑创建命令将是一种解决方案......但是谁会以特定间隔触发它? (不应该按照PureMVC的命令来完成)
  2. 将命令触发器放在介体中或将逻辑放在介体中(这会使pureMVC有点不纯净:))
  3. 如何为这种情况找到解决方案?

4 个答案:

答案 0 :(得分:1)

取决于Command应该做什么 - 如果它更新ModelTimer放入您的Proxy课程中,并每次发送Notification映射到Command的xx秒,它可以执行您希望它执行的操作。

如果只是更新View,您可以将Timer添加到相应的Mediator,但之后您根本不需要Command。< / p>

**

不要创造比你需要更多的单身人士。 ApplicationFacade已经是一个 - 试着保持这种状态。

**

如果你必须对后端进行任何异步调用,只需确保将EventListener添加weakReference设置为true - 那么一切都应该没问题......

答案 1 :(得分:1)

您需要拆分要运行的异步进程以及重复触发所述进程。我的建议是为异步进程创建一个代理服务器和一个单独的代理服务器,它是一个Timer的包装器,它只是在超时时发送通知。通知与命令相关联,而命令又调用异步代理的方法。这样,您就可以为命令添加逻辑,例如,如果进程仍然忙,该怎么做。

创建两个代理的好处:您遵守SRP。无需触摸异步代理即可轻松交换/修改/删除定时代理。一切都很好分开。

答案 2 :(得分:-1)

试试这个:

  • 创建一个单例类 - singleton class in Flex
  • 在这个类中有一个函数(例如,叫做start),当被调用时启动一个计时器,其回调函数发送一个通知,触发一个执行业务逻辑的命令。
  • 当您准备好开始常规操作时,只需在您的单例上调用get实例方法,创建单例,然后调用它的start()函数。 *可选择具有取消定时器的停止功能,并停止发送常规通知。

    package
    {
     import flash.events.TimerEvent;
     import flash.utils.Timer;
    
    
     public final class RepititiveSingleton
     {
        private var timer:Timer;
    
        private static var instance:RepititiveSingleton= new RepititiveSingleton();
    
        public function RepititiveSingleton() {
            if( RepititiveSingleton.instance ) {
                throw new Error( 
                    "ReptitiveSingleton can only be accessed through Singleton.getInstance()" ); 
            }
        }
    
        public static function getInstance():RepititiveSingleton{                        
            return RepititiveSingleton.instance;
        }
    
        public function start(interval:Number = 1000):void {
            timer = new Timer(interval);
            timer.addEventListener(TimerEvent.TIMER, onTimer);
        }
    
        private function onTimer(e:TimerEvent):void {
                     ApplicationFacade.getInstance().sendNotification(Constants.REPTITIVE_ACTION_NOTIFICATION));
        }
    
     }
    }
    

此代码假定您具有名为ApplicationFacade的Concrete外观,并使用从名为constants的类引用的String常量注册了通知。

然后在适当的地方(可能在你的启动命令中)你可以添加:

RepetitiveSingleton.getInstance().start();

希望这会对你有所帮助。

答案 3 :(得分:-1)

IMO,计时器属于调解员。让它 - 好吧,调解异步流程消息。这将是一个小型状态机,以确保一切运行顺利。命令仍然繁重,它只是像911操作员一样坐着。