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

PureMVC 我也會 [6]

Mediator ViewComponents 與 pureMVC 架構的中介 監聽並反應 View Component 發出的 Event 可以發送與接收 Notification 儘量少操作 Proxy 公開方法,多用 sendNotification... Mediator design pattern 要多認識這個 Mediator 設計模式的話,請自行看連結說明啊! 簡單來講,假使有一個 View 裡面有好幾個 MovieClip 組成,而這些 MovieClip 會互相影響對方...這個情況在 Flash 中,通常都會變成下圖: MovieClip 直接控制其他 MovieClip 搞到整個關係很複雜...換一個元件簡直是災難。 加入 Mediator 後,示意圖就會變成: 這樣,所有的 MovieClip 都透過 Mediator 來跟其他 MovieClip 溝通,當某一個 MovieClip 替換成別的元件,這時候也只需要修改 Mediator 中的引用即可,是不是變得很乾淨?如果同一組 MovieClip 有另外一個操作模式,也只需要替換掉 Mediator 即可!天下太平啊~~~ 而 PureMVC 中就是利用 Mediator class 為與前端 ViewComponent 的中介,這樣可以切開 ViewComponent 與 PureMVC framework 的關係,不管你前端介面使用 Flash or Flex 製作都跟程式核心無關。 所以 ViewComponent 製作時只需要兩個原則,一把所有的請求都以 Event 送出由 Mediator 處理,二提供公開方法, Mediator 只需要監聽 View 的 Event,將收到的資訊透過公開方法喂進 ViewComponent 即可。 如在 ViewComponent 中: public function setList( result:Object ):void{ list.dataProvider = result as ArrayCollection; } //然後在按下取得資料的按鈕 Click action 寫上: dispatchEvent( new Event( "GET_LIST" )); 新建 Mediator 的時候一樣有幾個重點方...