Skip to main content

[Flex] pureMVC MultiCore with Modules



跟 pureMVC MultiCore & Modules 相處幾天後發現了一個簡易串接流程能互相接聽與發送訊息(其實還有更爛的方法...XD 只是為了能自動化改用這個...)。不能說下面分享的是很好的解法,只能說它應該是個蠻容易理解外加還沒發現有啥嚴重 bug 的方法...

做法其實很簡單,就是 System facade 在 load Module 時,建立一個 Module 專用的 Mediator 並且將 Module 指定給它為其 viewComponent,就可以透過這個 Mediator 串接起來,這樣不管有多少個 Modules 都可以對應一個 ModuleMediator 來處理。這個串接的 Mediator 特別的地方就是它做了雙向註冊,如同轉接國際電話的接線生,因為跟兩邊都有關係,所以可以接聽跟發送兩邊的 Notifications。

請看 Live Demo(Demo 頁點選滑鼠右鍵可以看 source code )

  1. ModuleManager 是寫在 Main.mxml 內而不是跟著 ModuleCommand 一起,原因是在 Flex 3.2 SDK 之後版本為了解掉更嚴重的 Module load & unload memory leak bug.. IModuleInfo 是區域變數的話,就容易被 GC 掉...這不是個 bug 喔!(Adobe 講的...也不知道是真的假的...沒特別研究...)
  2. Module 沒有真正 unload 掉,反正它會反覆載入,就不真的移除了...所以請自助...
  3. System facade 只用 ModuleCommand and ModuleMediator 處理所有的外部 Modules,所以重點都在這兩個 class 內...XD
  4. 為了輸出專案時不會將 Module 一併打包和要統一命名 Module's facade,所以外部的 Module 都需要 implements IModuleComponent interface。
  5. (Edit: 3/4/2009) 由於 System facade 掌握著 Module facade 的名字,如果 System message 需要傳到特定的 Module 也可以很簡單的實現...=P

Comments

  1. 感謝分享,最近剛好在寫pureMVC跟module的溝通,這個範例可學到不少東西

    ReplyDelete
  2. Erin大有試過fabrication嗎?
    http://code.google.com/p/fabrication/
    用這個寫multicore版很方便也很簡潔呢^^

    ReplyDelete
  3. 喔喔~ 有時間來研究一下...=P,謝謝分享捏~~我就是喜歡可以簡潔的寫法...XD

    ReplyDelete
  4. Erin姐姐, 你寫的文章, 好有深度
    有基礎的PureMVC文章可以介紹的嗎

    ReplyDelete
  5. 奶綠哥哥...要基礎的pureMVC文章到他的官網上一堆喔~~^^*

    ReplyDelete
  6. PUREMVC 我也想摸摸看了~~@@

    不過可惜能力還不夠

    我這篇引用到你文章~ 先謝謝了 ^^

    http://blog.corausir.org/programing/ausir-855


    corAusir 程式逗設計 - 提供設計資料與程式設計 -

    http://blog.corausir.org/

    ReplyDelete
  7. 正可惜,demo页面查看不了了。。

    ReplyDelete
  8. Demo 頁還是活的好好的呦...看你用簡體的...所以你可能要透過代理才可以看喔!

    ReplyDelete
  9. 我在公司打开了,这个确实不错,不过不知道跟fabrication有什么区别?最近正在用pureMVC做项目,希望交流下。

    ReplyDelete
  10. 關於 Fabrication 我並沒有花很多時間下去研究,它是用一個加強版 pureMVC 架在原本的架構上,跟一般 pureMVC的工具包不同,它提供完整的架構,所以實作幾乎是綁定在 Fabrication 上...就看你自己選擇囉..我本身是比較愛亂加亂改東西...所以喜歡自己組合工具包...=P

    ReplyDelete
  11. 最近在挑選pureMVC的版本時,遇到了大決擇,
    練習時,使用pureMVC standard的版本做了一個簡單的AddressBook的維護。
    但要實作的系統,是像一個有menubar,多個功能的維護系統。(一般的Windows應用程式)。
    但不知道要用multicore的版本或是standand的版本。
    是不是有什麼經驗可以分享,在挑選版本時的考量呢?
    (目前多個功能,都是用MDI Windows的方式,若menubar被click了,
    再去new 那個MDI Window,這樣的話,是不是跟本就不需要多個ApplicationFacade,
    也不會把多個功能拆成多個Module)

    ReplyDelete
  12. 關於 pureMVC multicore 版本應用程式的開發我最近會找個時間分享一下... 其實 pureMVC standard 就很夠用,但是為了整合部分 modules view 所以使用 multicore 的版本,寫到目前為止我是覺得 shared library 比 module 好用...

    ReplyDelete
  13. 謝謝您的回覆,本來是想使用multicore + pipe + fabrication來做~~想說如果不用module的話,就如你所說的,改用standard來做即可~~

    ReplyDelete
  14. If you need the source code, you can email me.

    ReplyDelete

Post a Comment

Popular posts from this blog

[AIR] JoSiResize - Mobile 開發小工具

JoSiResizev0.6.0,Adobe AIR 3 runtime之前開發 tool app 的時候並沒有很深刻的體認到圖片素材的 resize 是一個很麻煩的事情...畢竟圖片使用量並不大,等到開發遊戲類的 app 才發現光處理不同螢幕尺寸的圖片素材是一個相當折磨人的工作。
因此 JoSiResize app 誕生了~~~原理是採用最小 scale 長寬比例不變的方式進行放大縮小。使用方法非常簡單,設定好變更的尺寸,接下來,將需要處理的圖片檔案全選直接拖曳到視窗內,畫面即會跳出預備儲存的檔案夾選擇畫面,確認後即開始轉檔。

PureMVC for Titanium Mobile

為了秉持著哪裡都要用 PureMVC 的想法,試著修改 PureMVC 官網上提供的 Javascript 版本給 Titanium 使用。
**source code**
有任何問題請上:Titanium Mobile 中文開發者論壇

建立 instance 的方法:使用 Puremvc 為 namespace
Ti.include('puremvc-js-1.0.js');
var c = Puremvc.clone( Puremvc.SimpleCommand );
var p = Puremvc.clone( Puremvc.Proxy, "TestProxy", "This is TestProxy's data" );
var m = Puremvc.clone( Puremvc.Mediator , "MainMediator" );

[Unity] erinylin.lazylib - Cookie for PlayerPrefs

有鑑於 PlayerPrefs 測試與版本更新問題,將大家都愛用的 PreviewLabs.PlayerPrefs 打包起來,製作重點還是以懶人為主,基本上 PlayerPrefs 資料更新與數量並不可能會有強烈衝擊效能的狀況產生,所以為了方便開發,就弄了一個視覺化工具,方便除錯用。

雖然 PreviewLabs.PlayerPrefs 作者都宣告放棄他們的版權,不過為了尊重程式,僅僅加入了兩個公用函式,其他並無更改。

內有:
Cookie ManagerCookie 用 DataObject 混合編輯 ScriptableObject執行階段除錯視窗工具當然還是有懶人常數檔案輸出資料版本控制,方便更新版後儲存資料更新功能其實很多,有興趣的請自行到 Github 下載並參考範例吧!