Flex 2.0實踐

來源:互聯網
上載者:User

自從識得Flex以來,我便喜歡上了這個新技術。

說它是新技術,也許有點欠妥。利用AS指令碼在Flash中製作表單,這應該是很早以前的事情了,想來很多Flash高手現在仍然對Flex嗤之以鼻,也算是這個道理。其實Flex之所以能夠得以流行,完全得益與Adobe給Flash帶來的革新:Action Script 3.0。

Flex來了

我以前曾經在Flash中寫過一些小程式,主要是為了獲得良好的視覺效果。說實話,在所有我用過的IDE中,Flash的IDE的確很糟。介面很擠、協助很少、動態提示不友好,而且,as指令碼很難管理等等。所以,我對用Flash來做稍大一點的項目,從來都沒奢望過。只到有一天,我偶然看到了Flex 2。

Flex 2.0.1,是目前Flex的最新版本。用過的人都知道,相比於Flex 2.0來說,Flex 2.0.1的推出,是Flex功能上煥然一新的飛躍。有很多人據此預言,Flex 2.0.1中很多新功能的定位,將直接面對Flash 9,以及Adobe即將推出的Apollo項目。

第一個Flex實踐

近期的一個B/S項目,我完全採用Flex來進行用戶端開發。由於Flex提供了充足的通訊方式:HttpService、WebService以及Remote Object Service調用。這三種方式都是非同步,並提供了回調事件,這種方式恰好是Ajax大行其道的原因。

基於項目的考慮,在項目中需要進行大量的資料插入、查詢、報表、以及資料CRUD的操作,其實,ROS應該是最好的通訊方案。不幸的是,ROS需要Flex Data Service服務,對於多CPU的伺服器,這是個高成本的投入,只能忍痛割愛了。因此,本項目採用HttpSevice作為通訊方案。

你是否需要架構?

說實話,在用戶端的開發中,我從來沒有認真考慮過架構問題。因為,對於HTML和Javascript組成的Web頁面來說,的確沒有一個很理想的解決方案。可是在Flex中,問題終於出現了。

總體來說,Flex算得上一個獨立的開發環境。這一點,類似與Java和.net開發環境一樣。Java提供了JDK,.net提供了.net framework,而Flex則提供了Flex SDK。我們的應用,寫在Action Script的類和一個個的MXML檔案中。對象與對象之間,通過事件和方法調用進行通訊,不同的對象往往需要共用相同的通訊群組件和資料、甚至共用代碼和變數。因此,當寫了十個以上的類時,你就會發現,代碼亂的一團糟。

聯想在Java中使用Spring的經驗,我立即意識到架構的重要性。那幾天,我一直在Adobe官方網站上轉悠,試圖找到些線索。於是,我找到了Cairngorm。

Cairngorm架構

Cairngorm架構,用作者自己的話來說,只能叫做Micro Architecture(微型架構)。的確,Cairngorm只是一些設計模式的應用,包括FrontController模式、Commander模式、以及Proxy模式等。其原理非常的容易理解:

FrontController負責註冊所有的事件類型以及事件發生時所調用的Commander。當組件之間需要通訊時,組件向FrontController發出event並在event中傳遞參數,然後FrontController調用Commander完成任務並更新model中的資料。所有的model中的Data Object都是bindable的,這樣,所有的組件自動實現了資料的更新。

ModelLocator是所有model data的核心。系統用到的所有公用資料都儲存中ModelLocator中,Commander通過ModelLocator進行資料通訊。通訊採用Proxy的方式,所有的通訊方式都被隱藏在Proxy的後面,這樣當更換通訊模組的時候,不會影響到其他的代碼。

當然,由於Flex提供的幾種Service方式差異很大,所以,Proxy技術並不能完全的實現程式碼後置。但這種技術本身,給我們提供了很大的參考價值。

簡化的方案

Cairngorm 的確給我們帶來了全新的理念,但我只打算使用它的部分理念,因為,對於一個中小型的項目來說,Cairngorm還是顯得複雜。Cairngorm的設計目標是,最大程度上減輕組件之間的耦合,而把所有的對象之間的通訊都改為事件。這樣,在減低了耦合性的同時,降低了系統的效能和可測試性。

在我的設計方案中,我去掉了FrontController、Commander等概念,保留了ModelLocator、Event和Proxy。系統流程如下:ModelLocator負責註冊和派發事件,儲存中心資料。組件通訊採用Event方式,同伺服器的通訊採用ServiceProxy。

所有的代碼都寫在Action類中,所有的Action類都實現了IResponder介面。這樣,ServiceProxy就可以把非同步事件傳播給Action對象。每個Action對象執行個體化一個ServiceProxy類,並在組件中調用action對象進行操作。如果需要通訊,則由組件在ModelLocator中派發事件,另一個註冊了該事件的組件獲得了通知。

這是一個簡化了的設計方案,雖然增加了對象之間的耦合,但整體思路更加清晰,代碼量和編譯後的swf檔案大小都得到了最佳化。

Flex Builder 2心得

Flex Builder2完全基於Eclipse平台,這給項目的設計帶來了極大的效能改善和增強使用者體驗。

方便的功能:

  1. 可選的自動編譯項目,這樣在儲存後系統立即更新到bin目錄,並能夠立即檢查出代碼中的錯誤並給出提示;
  2. 可以選擇清除所有輸出,系統將自動重新進行編譯;
  3. 強大的調試功能;
  4. CTRL+ALT+↑ 向上複製一行,CTRL+ALT+↓ 向下複製一行,這個功能在代碼編寫中非常的實用;
  5. 可以改變代碼檔案的檔案編碼;

不足之處:

  1. 無法選擇開啟項目。如果一個項目從其他地方複製過來,在Flex Builder中在無法開啟,只能建立一個項目,然後把這個項目覆蓋上去;
  2. 不能自動在Developer視圖和Debug視圖之間進行切換,甚至連快速鍵都沒有提供;
  3. 編輯器不支援滑鼠拖拽複製,只能採用剪下和粘貼,相當不便;
  4. 調試視窗中不能對變數進行滑鼠移至上方提示,也不能把變數直接拖拽到watch視窗,變數查看相當不便;
  5. 很多自訂類的方法在動態提醒中無法顯示參數定義;
  6. 不能對import列表進行最佳化。雖然提供了對import的整理功能,但這個功能只在類中可以使用,在mxml中則無法使用;
  7. 缺少代碼格式化功能;
  8. 對xml檔案支援不好,或者說乾脆不支援;

似乎說了很多的缺點,但其實只是因為太關注,所以太看重。Flex 3.0已經在研發的過程中,隨著Apollo項目的推出,Flex將會有一個更加值得期待的未來。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.