走在架構(gòu)師的大道上 Jack.Wang's home

          Java, C++, linux c, C#.net 技術(shù),軟件架構(gòu),領(lǐng)域建模,IT 項(xiàng)目管理 Dict.CN 在線詞典, 英語(yǔ)學(xué)習(xí), 在線翻譯

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            195 Posts :: 3 Stories :: 728 Comments :: 0 Trackbacks
          Flex+J2EE 之小記
          Jack. Wang 2008-9-10(本待完善...)
          wbjeasygo@163.com
          由于本人也是初學(xué)者(剛看了兩天視頻),所以請(qǐng)高手指點(diǎn),這里贊下 blog 名叫交口稱贊的兄弟,他在flex 方面是行家,謝謝了。

          摘要:最近晚上抽出點(diǎn)時(shí)間寫(xiě)了這篇文章,關(guān)于 Flex 開(kāi)發(fā)方面的語(yǔ)言和架構(gòu),介紹了大家都熟悉的分層結(jié)構(gòu),著重介紹視圖層(flex 實(shí)現(xiàn)),服務(wù)控制層和領(lǐng)域模型層,并按照嚴(yán)格分層,高解耦合性并結(jié)合 Flex 技術(shù)實(shí)驗(yàn)了一個(gè)用戶管理小模塊,案例不是目的,重要的是介紹開(kāi)發(fā)思想。本文第一部分介紹 Flex 相關(guān)技術(shù)以及 ActionStript3.0 語(yǔ)言。第二部分介紹開(kāi)發(fā)實(shí)例的開(kāi)發(fā)過(guò)程,代碼可以下載,亮點(diǎn)在接口工程。由于本人 flex 經(jīng)驗(yàn)不足,在以后的工作中會(huì)不斷補(bǔ)充。
          關(guān)鍵字:Flex, J2EE, 架構(gòu)
          1. Flex 介紹 
                  FLEX,是Rich Internet Applications時(shí)代的牛×產(chǎn)物Rich Internet Applications,翻譯成中文為富因特網(wǎng)應(yīng)用程序。傳統(tǒng)網(wǎng)絡(luò)程序的開(kāi)發(fā)是基于頁(yè)面的、服務(wù)器端數(shù)據(jù)傳遞的模式,把網(wǎng)絡(luò)程序的表示層建立于HTML頁(yè)面之上,而HTML是適合于文本的,傳統(tǒng)的基于頁(yè)面的系統(tǒng)已經(jīng)漸漸不能滿足網(wǎng)絡(luò)瀏覽者的更高的、全方位的體驗(yàn)要求了,這就是被Macromedia公司稱之為的“體驗(yàn)問(wèn)題”,而富因特網(wǎng)應(yīng)用程序的出現(xiàn)也就是為了解決這個(gè)問(wèn)題。
                 Flex最重要的兩個(gè)技術(shù)要數(shù)AS和MXML, MXML 和 HTML 一樣是標(biāo)記語(yǔ)言,它描述了反映內(nèi)容與功能的用戶界面。與 HTML 不同的是,MXML 可對(duì)表示層邏輯與用戶界面和服務(wù)器端數(shù)據(jù)綁定提供聲明抽象。MXML 可將表示與業(yè)務(wù)邏輯的問(wèn)題徹底分開(kāi),以實(shí)現(xiàn)最大程度地提高開(kāi)發(fā)人員的生產(chǎn)率及應(yīng)用程序的重復(fù)使用率。MXML 的開(kāi)發(fā)基礎(chǔ)是在迭代過(guò)程上,這與其他類型的 Web 應(yīng)用程序文件如 HTML、JSP、ASP是相同的。開(kāi)發(fā) MXML 應(yīng)用程序就象打開(kāi)一個(gè)文件編輯器一樣簡(jiǎn)單,只要輸入一些標(biāo)簽、保存文件,然后在 Web 瀏覽器上打開(kāi)文件 URL 即可。
                  MXML 文件同時(shí)也是普通的 XML 文件,所以可以選擇多種開(kāi)發(fā)環(huán)境。可以在簡(jiǎn)單文件編輯器、專用 XML 編輯器或是支持文件編輯的集成開(kāi)發(fā)環(huán)境 (IDE) 中進(jìn)行開(kāi)發(fā)。由于 MXML 符合 W3C XML 方案的定義,您也可以使用結(jié)構(gòu)化編輯,如代碼著色和代碼提示。 MXML和HTML間最大區(qū)別:前者定義的應(yīng)用是編譯的SWF文件,執(zhí)行于FlashPlayer客戶端中。后者是基于頁(yè)面技術(shù)的應(yīng)用。因此前者能提供更豐富的、動(dòng)態(tài)的UI。MXML不支持Flash的某些特性,例如:時(shí)間軸。但是可以利用Flash設(shè)計(jì)組件并應(yīng)用在Flex中。MXML應(yīng)用可以是一個(gè)MXML文件,也可以是多個(gè)MXML組成,MXML支持MXML文件形式的自定義組件、ActionScript文件形式的自定義組件以及在Flash中建立的自定義組件。 FLEX試圖通過(guò)提供一個(gè)程序員們已經(jīng)熟知的工作流和編程模型,讓程序員比從前更快更簡(jiǎn)單地開(kāi)發(fā)動(dòng)畫(huà)及RIA應(yīng)用。在多層式開(kāi)發(fā)模型中,F(xiàn)LEX應(yīng)用屬于表現(xiàn)層。FLEX的語(yǔ)言和文件結(jié)構(gòu)也試圖把應(yīng)用程序的邏輯從設(shè)計(jì)中分離出來(lái)
                   總之,flex 是未來(lái)界面開(kāi)發(fā)的一個(gè)好方向,據(jù)我了解很多公司都要求員工要學(xué)習(xí) flex 技術(shù),可見(jiàn) flex 受歡迎的程度。
          2 .ActionStript3.0 特性介紹
                 ActionScript 是針對(duì) Adobe Flash Player 運(yùn)行時(shí)環(huán)境的編程語(yǔ)言,它在 Flash 內(nèi)容和應(yīng)用程序中實(shí)現(xiàn)了交互性、數(shù)據(jù)處理以及其它許多功能,ActionScript 是由 Flash Player 中的 ActionScript 虛擬機(jī) (AVM) 來(lái)執(zhí)行的。ActionScript代碼通常被編譯器編譯成“字節(jié)碼格式” ,有點(diǎn)類似 java 的處理和運(yùn)行機(jī)制。變過(guò) C#,Java和javascript程序的朋友,肯定能在 ActionScript 中找到這些語(yǔ)言的影子。
           2.1內(nèi)置命名空間和自定義命名空間
                 四個(gè)內(nèi)置修飾符:  
          1 public :對(duì)所有代碼可見(jiàn) 
          2 private: 只對(duì)類內(nèi)部可見(jiàn) 
          3 internal :只對(duì)定義所在的同一包內(nèi)可見(jiàn) 
          4 protected :對(duì)同一包以及不同包的子類可見(jiàn)

                自定義命名空間:
                       使用關(guān)鍵字namespace定義命名空間,聲明屬性和方法時(shí),應(yīng)用命名空間。
                       AS 代 碼: 
            
          1
          2Namespace testSpace="org.blogjava.jm/testSpace ";   
          3testSpace myfunction2():void{} 
          4 
          5use mySpace2;  
          6myfunction2(); //調(diào)用使用 use 關(guān)鍵字打開(kāi)命名空間

          2.2       Local 變量特點(diǎn)    
                   與java不同的是,在as3中,變量沒(méi)有塊級(jí)作用域(即兩人大括號(hào)中間),如果在一個(gè)塊內(nèi)聲明了一個(gè)變量,比如一個(gè)for循環(huán)內(nèi)聲明了一個(gè)變量,它在該代碼所在整個(gè)函數(shù)內(nèi)都是可訪問(wèn)的   
          1function myFunction():void{   
          2     for(var i:int=0;i<5:i++){   
          3       var last:int = i;    
          4    }
              
          5     trace(last); //last 在 for 中定義但可以在 for 塊外面訪問(wèn)到,個(gè)人覺(jué)得這樣設(shè)計(jì)欠妥,盡管很方便。   
          6}
           
          2.3       Dynamic 類 
                 Object 類本身就是動(dòng)態(tài)類,當(dāng)然也可以用 dynamic 關(guān)鍵字來(lái)聲明一個(gè)類,所謂動(dòng)態(tài)就是在運(yùn)行時(shí)可以對(duì)類追加屬性和方法。  
          1dynamic class Protean{} 
          2var myProtean:Protean = new Protean();  
          3myProtean.name = "jack.wang";  
          4myProtean.password = 3;  
          5trace(myProtean. name , myProtean.password ); 

            2.4       定義函數(shù)的兩種方式:函數(shù)語(yǔ)句和函數(shù)表達(dá)式      
           1//函數(shù)語(yǔ)句聲明    
           2Function fun1():void{} 
           3       
           4//函數(shù)表達(dá)式聲明  
           5var fun2:Function = function():void{}  
           6//函數(shù)表達(dá)式聲明的函數(shù)是不能夠被垃圾回收的,必須顯示的調(diào)用 delete 命令。
           7var t:Test = new Test(); //t是動(dòng)態(tài)類Test的一個(gè)實(shí)例 
           8t.funt = function(){};//把一個(gè)函數(shù)聲明為t的一個(gè)屬性 
           9delete t.funt; //刪除剛才新增的函數(shù),我們剛才聲明的函數(shù)也被回收了
          10

          2.5       在as3中也有arguments對(duì)象,功能基本上和javascript中的一樣。       
                    arguments 對(duì)象是一個(gè)數(shù)組,其中包括傳遞給函數(shù)的所有參數(shù),arguments.length 屬性報(bào)告?zhèn)鬟f給函數(shù)的參數(shù)數(shù)量,(避免將 "arguments" 字符串作為參數(shù)名,因?yàn)樗鼘⒄诒?arguments 對(duì)象) 
           
           function traceArgArray(x:int):void  
           
          {
              
          for (var i:uint = 0; i < arguments.length; i++{  
            trace(arguments[i]); 
           }
             
           }
             
           traceArgArray(
          123);   
           
          // 輸出:    
           
          // 1    
          // 2   
          // 3 
          當(dāng)然也可以用類似 java 的形式  function traceArgArray(x: int,  args) 

          2.6       在as3中允許定義同名的靜態(tài)屬性和實(shí)例屬性  

          1
          class StaticTest {  
          2 static var message:String = "static variable";
          3 var message:String = "instance variable";     }
           
          4 var myST:StaticTest = new StaticTest(); 
          5trace(StaticTest.message); 
          // 輸出:靜態(tài)變量    trace(myST.message); // 輸出:實(shí)例變量 


           2.7       在as中有一個(gè)叫做set和get存取器的東西,類似JavaBean,但又有所不同。
          class GetSet 
          private var privateProperty:String;   
          public function get publicAccess():String
          return privateProperty;    
          }

          public function set publicAccess(setValue:String):void  {        privateProperty = setValue;    
          }
            
          }
            


           3 個(gè)人實(shí)驗(yàn)介紹
                 案例是超級(jí)簡(jiǎn)單的,開(kāi)發(fā)Web 應(yīng)用的,不管你是基于 J2EE,.net 平臺(tái)還是其他的 PHP 等等都很熟悉分層架構(gòu),其中五層是最熟悉不過(guò)的了,一般分為表示層,控制層,服務(wù)層,模型層和數(shù)據(jù)層,有的公司干脆就把服務(wù)層和模型層合并起來(lái)和控制層合并在一起,基于分層的開(kāi)發(fā)可以橫向也可以縱向,由于引入 flex 技術(shù),因?yàn)椴⒉皇撬腥硕级?flex 開(kāi)發(fā)方式,盡管他和傳統(tǒng)的 Swing, SWT,GWT開(kāi)發(fā)很相近 ,不過(guò)這樣需求分析時(shí)可以構(gòu)建可演進(jìn)的原型系統(tǒng),界面也很 RIA。
                 人們常提面向接口編程于是經(jīng)常看到 IUser user=new User();這樣的代碼,似乎就是在用接口,但是 new 的動(dòng)作還是有依賴,于是人們用一些設(shè)計(jì)模式比如 Factory, Proxy,反射等等模式,后來(lái)又有了更好的依賴注入,似乎很完美了,可人們又陷進(jìn)了過(guò)度設(shè)計(jì),其實(shí)接口應(yīng)用比直接用原類要多耗費(fèi)幾個(gè)機(jī)械指令 User user=new User(),而且在一個(gè)內(nèi)聚的組件中盡量用對(duì)象直接連接,該分開(kāi)的時(shí)候我們?nèi)ビ媒涌诜郑涌诘哪康氖菫榱顺橄螅橄蟮哪康氖菫榱私怦睢?br />        本開(kāi)發(fā)為了把模型層和服務(wù)層完全分開(kāi),引入接口工程,也就是單獨(dú)開(kāi)發(fā)一個(gè)工程來(lái)設(shè)計(jì)接口,這個(gè)工程有設(shè)計(jì)師開(kāi)發(fā)。 用戶接口和工廠接口這兩個(gè)類在單獨(dú)的工程里開(kāi)發(fā),以便于模型和服務(wù)層同步開(kāi)發(fā)。 在服務(wù)層不能對(duì)外暴露 IUser 接口,而他也要接受數(shù)據(jù),這里用的是 UserVO 對(duì)象來(lái)封裝數(shù)據(jù),服務(wù)層不操作模型層的任何實(shí)現(xiàn)類,這樣這兩層之間完全解耦,當(dāng)接口工程和實(shí)現(xiàn)完成時(shí)候打成 jar 包到 web 工程下 Flex 開(kāi)發(fā)和 HTML開(kāi)發(fā)有很大的不同,客戶端和服務(wù)端交互的不是 HTML 而是 XML,所以在服務(wù)器端    的 Servlet 就應(yīng)該輸出 XML 流到客戶端。 最后 Flex 也是一個(gè)單獨(dú)的工程,通過(guò) HTTPService 和 Web 服務(wù)器端交互數(shù)據(jù)。
          下載:我的實(shí)驗(yàn)代碼
          其他視頻資料:http://www.aygfsteel.com/Jack2007/archive/2008/09/05/227125.html

          參考文獻(xiàn)
          1.http://ezen.javaeye.com/blog/107397
          2.http://www.nshen.net/blog/article.asp?id=555
          3. http://blog.csdn.net/mozilla/archive/2007/08/23/1756761.aspx
          4.http://hi.baidu.com/jlhh/blog/item/225aea197716b77adab4bd7f.html
          5.http://yexin218.javaeye.com/blog/203032
          6.http://yexin218.javaeye.com/blog/203032
          7.http://www.aygfsteel.com/realsmy/archive/2008/01/17/176054.html
           8. http://daoger.javaeye.com/blog/204694
           9. http://www.aygfsteel.com/alps/archive/2008/07/23/216940.html
          10.http://xy-z487.javaeye.com/blog/238074
          11.http://www.pin5i.com/showtopic-19682.html
          12. http://goday.blogbus.com/logs/13402716.html
          13. http://www.flashas.net/html/Flex/20070525/1779.html
          14. http://www.bluejia.cn/blog/?action=show&id=18



          本博客為學(xué)習(xí)交流用,凡未注明引用的均為本人作品,轉(zhuǎn)載請(qǐng)注明出處,如有版權(quán)問(wèn)題請(qǐng)及時(shí)通知。由于博客時(shí)間倉(cāng)促,錯(cuò)誤之處敬請(qǐng)諒解,有任何意見(jiàn)可給我留言,愿共同學(xué)習(xí)進(jìn)步。
          posted on 2008-09-11 19:03 Jack.Wang 閱讀(5994) 評(píng)論(4)  編輯  收藏 所屬分類: 開(kāi)發(fā)技術(shù)架構(gòu)師篇

          Feedback

          # re: Flex+J2EE 之開(kāi)發(fā)與架構(gòu) 2008-09-11 08:53 交口稱贊
          寫(xiě)的比較亂,不知道是說(shuō)代碼,給個(gè)例子,還是談架構(gòu)

          正統(tǒng)的方案是flex+lcds+J2EE
          免費(fèi)的方案是FLEX+BDS+J2EE
          異構(gòu)的方案是FLEX+HESSION+XXXX

          HTTPService 和webserivce是下下之選

          而且,完全可以在一個(gè)項(xiàng)目里面搞定,不需要分開(kāi)建項(xiàng)目
          也就是說(shuō)可以在一個(gè)項(xiàng)目里面同時(shí)開(kāi)發(fā)flex和J2EE
          前提是你會(huì)配置插件和整合項(xiàng)目


          而且沒(méi)有你寫(xiě)的這么復(fù)雜,說(shuō)實(shí)話,你給的例子只會(huì)讓新手誤解flex很復(fù)雜,其實(shí)flex是很簡(jiǎn)單,開(kāi)發(fā)效率超高的
          幾行代碼的事情
          flex的as3是同態(tài)語(yǔ)言,java對(duì)象通過(guò)bds到前臺(tái)可以直接使用
          你可以看看bds的官方例子
          一個(gè)后臺(tái)取數(shù)據(jù)的表格
          幾行代碼。直接把后臺(tái)一個(gè)java的list傳到前臺(tái),顯示在一個(gè)表格里面  回復(fù)  更多評(píng)論
            

          # re: Flex+J2EE 之開(kāi)發(fā)與架構(gòu) 2008-09-11 09:05 Jack.Wang
          @交口稱贊
          謝謝啦,flex 沒(méi)做過(guò)東西,只是興趣玩下。
          謝謝指導(dǎo)啊!  回復(fù)  更多評(píng)論
            

          # re: Flex+J2EE 之小記[未登錄](méi) 2008-09-11 19:10 afeigoo
          能給我mail一份代碼么?afeigoo@163.com
          正在學(xué)習(xí)中……  回復(fù)  更多評(píng)論
            

          # re: Flex+J2EE 之小記 2008-09-11 19:17 Jack.Wang
          可以下載了  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 水城县| 运城市| 信宜市| 大同县| 曲阜市| 乡城县| 南城县| 玛纳斯县| 离岛区| 武安市| 内丘县| 岳阳县| 松溪县| 琼海市| 若尔盖县| 盐亭县| 庄浪县| 紫云| 砚山县| 上林县| 扬中市| 娱乐| 墨竹工卡县| 平定县| 西林县| 广灵县| 金乡县| 吐鲁番市| 凤山市| 德庆县| 伊宁县| 江西省| 高陵县| 清水河县| 凤山市| 高雄县| 壶关县| 日照市| 衡山县| 蓬安县| 梁河县|