posts - 193,  comments - 520,  trackbacks - 0

                Jbpmside要使用Flex開發流程設計器以及管理器,剛好公司的一個內部項目也應用到Flex,大概花了一個禮拜來熟悉和了解Flex。其中發現Flex開發和AJAX開發的很多相通之處,這里把自己對Flex的一些學習心得總結一下。分為三部分,分別是對Riawave框架的介紹、參照Riawave,對自己先前采用的AJAX開發框架的介紹、以及對AJAX前景的一些自己看法。

          一、Flex框架Riawave的定制應用

          Flex有很多開發框架,最有名的是Cairngorm。但是Cairngorm太復雜了,職責的細粒度分離帶來的是過多的類和代碼,不太適合中小項目。這里我們采用了Riawave,準確的說Riawave并不是一個框架,它只是一個通訊錄管理的簡單代碼示例,它包含了很多的最佳實踐。這里想說一點,就是很多時候采用某種技術起決定因素的往往不是技術本身是否先進,而是看該技術的使用者是否眾多。


           

          Riawave將應用程序拆分成三部分,分別是ViewsModelLocatorDAO

           

          Views指的是應用里的頁面組件,例如表格、表單、菜單等。它的職責:1、組成整個應用的界面;2、對組件內部的原生事件進行處理,這些事件指發生在該組件里的鼠標事件和鍵盤事件;3、當需要其他組件進行協作時,發布定制事件;4、對其所關聯的數據進行操作;5、監聽其他組件發布的與之相關的定制事件,并做出展現形式上的改變。

           

          ModelLocator是整個應用的核心。它的職責:1、集中存儲應用的所有數據;2、給頁面組件提供統一的定制事件監聽器接口,即所有的頁面組件要對其他組件的定制事件監聽則必須通過ModelLocator來進行訂閱;3、唯一的定制事件發布接口,即任何頁面組件要發布自己的定制事件都必須通過ModelLocator發布;4、集中維護所有定制事件的類型。ModelLocator是單態的,通過ModelLocator,應用程序所有的定制事件都被統一管理。

           

          DAO負責操作應用的數據。它的職責:1、改變應用的數據,提供應用數據修改的統一接口,即用戶操作頁面組件改變數據時,實際上是由頁面組件轉發給DAO處理;2、遠程訪問服務端,Flex通常作為應用程序的前端展現出現,和AJAX一樣,數據的操作要和服務器端進行交互;3、服務器端返回正確的操作結果后,改變ModelLocator里的數據,發布定制事件,觸發相應頁面組件改變。

           

          可以看到,整個Flex應用完全是由事件驅動的。其他需要了解的部分:1FlexData Binding機制,這個機制實際也是由事件發布/訂閱機制實現的,它可以省去自己編寫重復的定制事件發布/訂閱代碼,實現組件展現數據與ModelLocator的數據同步;2VO,本地的數據建模、用途:發布定制事件時,通過VO攜帶組件數據,VO被包含在事件里;傳遞數據到DAO

           

          二、自己采用的自制AJAX框架介紹

          Flex一樣,AJAX也是事件驅動的。在自己以前的AJAX開發中,也自制過與Riawave類似的開發框架,應用的效果也不錯。在這個框架中,采用了Mootools

           

          使用過一些js庫,包括prototypeMootoolsJqueryExt。說說自己的看法:prototype更像是底層庫,封裝了DOM查找和操作、XMLHttpRequest異步訪問以及簡單的js類繼承體系,方便小巧;Mootools的特點是非常面向對象,另外對事件進行了統一的管理,這兩個特點決定了Mootools非常適合用以編寫自己的AJAX組件;Jquery在項目中使用過一部分,豐富的插件讓人印象非常深刻;Ext則是一個完整的解決方案,代碼非常有參考價值,提供了眾多的組件,但是只是適合企業應用,另外,效果有些讓人審美疲勞。


           

          應用程序分為三部分,分別是ViewModelLocatorDataHandler

           

          View同樣是應用里的頁面組件,例如表格、表單、菜單。它的職責:1、組成整個應用的界面;2、對組件內部的原生事件進行處理,這些事件指發生在該組件里的鼠標事件和鍵盤事件;3、當需要其他組件進行協作時,發布定制事件;4、調用DataHandler對其所關聯的數據進行操作;5、如果存在子組件,監聽子組件發布的定制事件,調用其他子組件協作,或者繼續向上發布定制事件。

           

          ModelLocator負責維護整個應用的數據。ModelLocator是單態的。

           

          DataHandler負責操作應用的數據。它的職責:1、改變應用的數據,提供應用數據修改的統一接口2、遠程訪問服務端;3、服務器端返回正確的操作結果后,改變ModelLocator里的數據,回調調用View里的方法,View會改變DOM元素、發布定制事件,觸發其他頁面組件重新渲染;4、應用程序的入口,由一個服務器訪問開始,使用返回數據構造View Container

           

          Flex相比,事件的訂閱/發布機制發生了變化,改為由View組件向父View組件依次冒泡傳遞,直到找到可完全處理該事件的組件為止。


          AJAX開發里,由于沒有統一的View組件,所以組件之間的關系通常是一種容器-子組件的關系,是一種層級關系。第二層的子組件可能充當第三層組件的容器。

           

          容器的職責:1.保存對所有子組件的引用;2.訂閱子組件的定制事件;3.調用其所管理的子組件協作;4.渲染時調用子組件依次渲染;5.銷毀時,依次調用子組件的銷毀方法;6.當對子組件發布的定制事件無法完全處理時,繼續向自己的上一層的容器發布事件。

          三、AJAX的看法

          很多人將AJAXFlex相比,認為AJAX只是一種過渡的技術。我不這么認為,我認為Flex適合企業應用,而網站還是會廣泛應用AJAX。另外,個人認為AJAX需要進一步提高的地方:1、統一標準的組件庫,現在的組件庫沒有標準,嵌入到網頁里應用沒有問題,但是當需要這些組件進行協作時會比較困難,需要大量的編碼;2、更快的JS解析引擎,這個沒什么好說的;3、更強大的運行環境。



          http://www.aygfsteel.com/ronghao 榮浩原創,轉載請注明出處:)
          posted on 2009-03-01 21:56 ronghao 閱讀(1792) 評論(0)  編輯  收藏 所屬分類: ajax相關
          <2009年3月>
          22232425262728
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          關注工作流和企業業務流程改進。現就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

          常用鏈接

          留言簿(38)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          常去的網站

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 前郭尔| 本溪市| 鹰潭市| 西充县| 康马县| 武鸣县| 云和县| 志丹县| 满城县| 西充县| 乳山市| 常宁市| 宁武县| 荆门市| 双峰县| 桑日县| 福贡县| 离岛区| 岳池县| 邵东县| 洪泽县| 仙居县| 新竹县| 盘锦市| 渭源县| 曲阜市| 吉首市| 长丰县| 寻甸| 信宜市| 萝北县| 白银市| 哈尔滨市| 镇原县| 尚志市| 资中县| 丹凤县| 五原县| 海门市| 五莲县| 内乡县|