使用 pureMVC 開發到現在,也遇到不少網友詢問相關問題,以下是 Erin 整理的幾個使用 pureMVC framework 開發 Flex app 的心得分享:
先寫到這邊,其他等想到再補充~~
- 雖然 pureMVC Standard 版本就很夠用了,但是你的 app 有未知擴充需求的話還是建議使用 Mulitcore 版本以達最大的開發彈性。
- 先問問自己能不能理解架構內 Notification and Command 是什麼作用?如果答案是『NO』,請先熟悉 pureMVC 的架構再行考量是不是要實作...因為有太多問題都可以利用它們解決。
- 先搞清楚你將要開發的 app 流程,花點時間研究官網上的 pureMVC Utilities,一定有工具包可以解決你的需求。
- 除了 Application 外 view component 不應該持有任何跟 pureMVC 有關的 Class instance reference,請善用 Flex & Flash Event 機制與外部溝通。
- 別把 view component 直接對 view component 溝通的開發邏輯帶到架構內,如果你還是打算這樣作就根本不需要使用任何 framework 來幫助開發!
View componet 溝通邏輯應該是 A-view component -> Event -> A-Mediator -> Notification -> Proxy, Command or B-Mediator -> B-view component。Event 機制在這邊有很大的作用,Mediator "儘量"不持有 view componet 子物件只接收其 Event ,不僅可以讓你跳脫如何用 A view 控制 B view 的思維...因為 A view 根本不需要去知道它發了 Event 後誰會被控制; 對 view component 新增修改也比較容易,ex. view component 由 Flex 3 改 Flex 4 版本(尤其 Flex 4 的架構改很大...你就會發現用 Event 的重要性...) - Mediator 要 override onRegister and onRemove function,做人要有始有終,請記得 EventListener 在移除前都清乾淨。
- 跨 view components 的資料最好都使用 proxy or command 處理,別直接 mediator 互傳。
- 整合 Flex 綁定資料機制:Value Object and Proxy 內使用 [Bindable] 來同步資料,可以省下處理後 update 資料的 Notification。如:
- 善用 runtime shared library。利用 Flex Library project 打包所需要的 asset files。再來想想你還需不需要 Module?目前 Erin 手上開發的專案使用 RSL,專案主程式僅 260kb, Flex runtime framework 564kb(不會重複載入), project assets swf 217kb....這樣還需要用 Module 嗎?所以 Module 在 Erin 的定義是久久出現一次的 view component 才會用它實作。
public class SomeProxy extends Proxy implements IProxy
{
[Bindable]
public var itemlist:ArrayCollection;
.........
所有的 itemlist 處理都是由 SomeProxy 執行,
只需要在 view component 初始化的時候由其 Mediator
將 itemlist 指定進去,view component 不作任何的
ArrayCollection 操作,只將"操作的動作"發送 Event
由 SomeProxy 同步,這樣同一個資料就可以讓不同
的 view component 持有但是又不會互相干擾!
先寫到這邊,其他等想到再補充~~
謝謝Erin,對pureMVC的了解又多懂了些皮毛了!
ReplyDelete請問假設mediator要去讀取同樣已讀取的資料(比如:xml data),也是要由command or proxy來執行,而不能用mediator來互丟嗎?
以上都是建議而已!其實程式寫作是你寫它不是它玩你...運用 framework and disign pattern 只是為了讓程式更有邏輯便於開發。
ReplyDelete但是如果發現你的 pureMVC app 都只有用到 Mediator 的時候,就需要重新思考一下你的架構有沒有問題囉!=)
如果要在 runtime 載入 view component
ReplyDelete有沒有可以套用所有新增的 view component 的方法
目前我是用 module
把 swf 給 load 進來
因為 swf 的路徑可以用字串去連
EX : someString + ".swf"
如果不使用 module 是否有其他方法可以達成呢?