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

[Flex] PureMVC standard with Spring extensions

由於上次稍微玩了一下 Robotlegs 依賴注入(DI) 主導的 MVC 框架,而著名也使用依賴注入的 Java / Java EE 的 Spring framework 出了 for ActionScript 的版本,剛好在最近 Spring ActionScript 1.0 正式 release 了(想了解 Spring 是啥咪東東的話請自行找 google 大神),這個版本除了基本框架外,也包含了 Cairngorm 與 PureMVC 的外掛...想當然耳,就拿來測試一下用在 PureMVC 內的感覺囉!! 參考了 官方範例 中 PureMVC 唯二的範例原始檔,以下使用的是「設定檔依賴注入 facade 透過 addConfigSource() 的方式來 init 」:(其實除了 embed 外,都是外部載入) Online Demo with source code 工作環境:FlashBuilder, Flex SDK4 請下載 PureMVC Standard 版本 再下載 Spring ActionScript 最新版本後,除了 spring-actionscript-cairngorm 不需要外,都放到 /src 下(記得只需要 org 開始...),也別忘了lib 內的 swc 檔 copy 到 /libs 下 Spring 的 injection 並不像 Robotlegs 直接來個 [Inject] metadata 的自動化那樣方便,但是其冷血度(檔案的鬆偶程度)更勝後者!如果你要使用設定檔(applicationContext.xml) 來做注入的話,準備工作就挺多的...XD 依照 applicationContext.xml 內設定的方式分別寫入 constructor 或者是 setter 依賴注入(本範例統一使用 setter injection) 為了跟大家都沒關係所以都使用 interface 來處理,所以你會在範例中發現大家都有介面...(並沒有真的研究過 Spring,也許還有其他作法) 準備 compiler 時候要用的 classe。由於在 setter, getter 的寫法上都使用 interface,所以真正用到的 class 需要預先在輸出階段就打包到程式內。 基本上 PureMVC 類 class...

[AIR] JoSi FXGtoLayout

JoSi FXGtoLayout v0.3.0, Adobe AIR 3 runtime 這個又是一個 "就是" 系列懶人小工具,主要是針對 Adobe fxg 格式做分析轉成 Mobile 開發用的視圖程式碼,加速畫面配置使用。 為什麼會製作這個工具,原因主要是本人在使用的 Corona SDK 與 Titanium SDK 都沒有好用的視覺化編輯工具。一般設計師產出 layout 檔會使用 PhotoShop 來製作,在不多花錢的原則下,畫面對齊的基準就是其輸出的 fxg 資料做對應,如果要一筆一筆將資料鍵入,做久也是會膩的,所以花了點時間將這個工具做出來...