2012-01-25 65 views
1

目前正在基於PureMVC框架的Flex AIR項目中工作。對項目有一個新的要求,一個操作要定期重複執行,並且有一定的業務邏輯。按照PureMVC,這應該被放置在命令中,但是隨後命令會在其執行時收集垃圾。如何在PureMVC flex應用程序中執行重複操作?

鑑於有一些疑慮/混亂/澄清場景...

  1. 創建與業務邏輯的命令將是一個解決方案......但後來誰將在特定的時間間隔觸發呢? (應該不是這一個命令來完成按PureMVC的)
  2. 配售命令觸發在調解或將邏輯調停(這將使PureMVC的一個有點不純的:))

怎麼辦我找到這種場景的解決方案?

+0

AFAIK命令_are_爲業務邏輯。所以我想你的意思是別的嗎?爲什麼要收集命令geta垃圾?它需要存儲狀態嗎?這就是模型的用途。還是需要控制一個順序的異步過程?或者我們可能使用了不同的業務邏輯定義。由於這是關於PureMVC,因此我使用PureMVC最佳實踐中的定義:http://puremvc.org/component/option,com_wrapper/Itemid,174/ – Creynders

+0

您是正確的命令,適用於業務邏輯。我有一個順序的異步過程在後臺運行。 –

回答

1

您需要分離你想運行的異步進程和重複觸發所述進程。我的建議是爲異步進程創建一個代理,併爲獨立的代理創建一個Timer,它只是在超時時發送通知。通知與一個命令耦合,該命令又調用異步代理的方法。這樣,您可以向命令添加邏輯,例如,如果進程仍然很忙,該怎麼辦。

創建兩個代理的好處:您堅持SRP。無需觸摸異步代理即可輕鬆交換/修改/刪除定時代理。一切都很好地分開。

+0

謝謝Creynders !!! –

-1

試試這個: - (如調用start)

  • 創建一個Singleton類singleton class in Flex
  • 在這個班,一個函數調用時啓動一個定時器,回調函數,其中發送通知,這會觸發執行您的業務邏輯的命令。
  • 當您準備好開始常規操作時,只需在您的單例中調用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,並已註冊的使用從一類稱爲常量引用的字符串常量的通知。

然後在適當的地方(也許在你的啓動命令),你可以添加:

RepetitiveSingleton.getInstance().start(); 

希望這有助於你。

+0

謝謝Ctrlspc! –

1

依賴於Command應該做的事情 - 如果它更新ModelTimerProxy類之一,併發送映射到Command,做什麼是你想要它做一個Notification每XX秒。

如果它應該只更新View您可以將Timer添加到相應的Mediator,但您根本不需要Command

**

不要創建比您需要更多的單例。 ApplicationFacade已經是一個了 - 試着保持這種方式。

**

如果你做任何異步調用到後端,只要確保添加EventListener沒有weakReference設置爲true - 然後一切都應該是好的...

+0

我不認爲在我的情況下添加另一個單身人士將是一個合適的解決方案。截至目前,我已將定時器添加到中介併發送通知來調用命令。我不認爲哪個是正確的解決方案,但是我必須用這個來解決問題。將代理添加到代理是一個很好的解決方法。謝謝!!! –

+0

如果這個答案對你有幫助,請接受它是正確的。謝謝 – pkyeck

-1

IMO,計時器屬於中介。讓它 - 好吧,調解異步過程消息傳遞。這將是一個小型的狀態機,以確保一切運行順利。命令仍然很繁重,它就像一個911運營商一樣。

相關問題