隨筆-18  評(píng)論-20  文章-0  trackbacks-0
          在正式開講之前,我們來探討一下為什么要使用JSF來實(shí)現(xiàn)SERVER ADF,這也是很多開發(fā)商跟我討論時(shí)經(jīng)常會(huì)問到的問題。

                世界上有300種Java的framework,這個(gè)數(shù)字是我?guī)讉€(gè)月前聽到的,現(xiàn)在可能已經(jīng)不止這個(gè)數(shù)了。我曾經(jīng)用過的framework包括Structs,Hibernate,Spring。這些framework不但能加速開發(fā),而且會(huì)帶來全新的程序設(shè)計(jì)理念。我當(dāng)時(shí)的感覺是:原來程序還可以這樣寫! 當(dāng)然,這些framework都是開源免費(fèi),你不用擔(dān)心自己的良心受到譴責(zé),也不用擔(dān)心比爾蓋茨半夜敲門收錢。

                 在這300多種framework中,ESRI為什么選擇了JSF?各個(gè)framework有各個(gè)framework的好處。JSF最大的優(yōu)點(diǎn)就是:像 Swing 和 AWT 一樣,JSF 是一個(gè)可以提供一組標(biāo)準(zhǔn)的、可重用的 GUI 組件的開發(fā)框架。

          原因之一: 行為與表示的完全分離。

               行為和表現(xiàn)不分離的一個(gè)典型例子是普通的JSP 技術(shù),這一技術(shù)很好,因?yàn)楹苋菀自?HTML(和類 HTML)頁面中混合 Java 代碼。這樣我們就可以使用強(qiáng)大的Java API的功能。當(dāng)然,很明顯的壞處是行為表現(xiàn)黏合在一起。而且代碼不容易重用。這讓我想起剛使用JSP技術(shù)時(shí),在文本編輯器下寫JSP頁面,讀寫數(shù)據(jù)庫,并且在同一個(gè)頁面上顯示出來的痛苦回憶。

                Model1架構(gòu)的出現(xiàn)使開發(fā)人員可以用javabean的方式進(jìn)行開發(fā),舒服多了。當(dāng)然,還有更好的。

                這就不得不提到著名的MVC結(jié)構(gòu),(MVC) model-view-controller架構(gòu)提供了一系列的設(shè)計(jì)模式,這些模式讓你可以輕松地應(yīng)用于程序地開發(fā),特別是有界面程序的開發(fā)。現(xiàn)在又有多少的程序是沒有界面的呢?
            
                Model包裝了商業(yè)邏輯,也包含了數(shù)據(jù)持久的代碼,包括存取數(shù)據(jù)庫或者存取文件。Model最好不要跟View有任何關(guān)系,它最好不要知道誰將顯示結(jié)果,是一個(gè)Swing界面,還是JSF界面,還是普通的JSP界面。為了做到這一點(diǎn),事先的規(guī)劃要花一些時(shí)間,但是相信我,這些花的時(shí)間帶來的價(jià)值將超過你的想象。如果設(shè)計(jì)得當(dāng),許多用ArcGIS Engine開發(fā)的代碼可以輕松在Server中使用,不需要修改任何代碼。.net也是一樣。

                View只用來顯示顯示邏輯,不能有任何商務(wù)邏輯。controller是view和model的橋梁,它和model進(jìn)行交互,并且把結(jié)果顯示在Model中。顯示頁面的選擇也由controller進(jìn)行選擇。我會(huì)在后面的講座中詳細(xì)解釋JSF中的Controller的實(shí)現(xiàn)。

                 Structs,Spring都實(shí)現(xiàn)了MVC的架構(gòu)。但是它們都沒有像JSF這樣,提供一個(gè)事件驅(qū)動(dòng)的組件對(duì)象模型。大家可以想一想,一個(gè)平常在HTML中使用的標(biāo)簽,     <input type="text" name="q">,在JSF框架中變成了一個(gè)組件,這個(gè)組件還可以有事件,而且可以對(duì)這個(gè)事件可以進(jìn)行編程。這是多么得激動(dòng)人心啊! GIS程序需要和用戶進(jìn)行良好地交互,選擇一個(gè)事件驅(qū)動(dòng)的framework,可以更加容易編程和實(shí)現(xiàn)。

              這是ESRI選擇JSF的重要原因之一。
                (未完待續(xù))

          為什么我們選擇JSF,而不是其它framework(續(xù))

          原因之二: 事件容易捆綁到服務(wù)器端代碼。
          JSF提供了多個(gè)事件驅(qū)動(dòng)的GUI控件, 比如最最常見的command button。這些command button會(huì)產(chǎn)生事件,我們有機(jī)會(huì)對(duì)事件進(jìn)行編程;我在以前的講座中曾經(jīng)講過,ArcGIS Server的MapControl和command button是兄弟,他們都繼承自javax.faces.component.UICommand;是不是感覺很奇妙啊?繼承自UICommand的原因是要利用UICommand的很多事件,對(duì)鼠標(biāo)在Map Control上的動(dòng)作,比如放大,縮小,需要產(chǎn)生事件,這些事件提交到相應(yīng)的監(jiān)聽器,監(jiān)聽器會(huì)對(duì)事件進(jìn)行處理。有關(guān)于MapControl的問題先提這些,在后面的講座中我會(huì)詳細(xì)解釋。
             
               舉一個(gè)簡(jiǎn)單的例子吧,一個(gè)最簡(jiǎn)單不過的fullextent工具,如果我自己來寫,可以寫成這樣:
          <h:commandButton id="redisplayCommand" type="submit" value="Full Extent" actionListener="#{getMapBean.getFullMap}" />

          這個(gè)按鈕,用來縮放到全圖,它的監(jiān)聽器是綁定到getMapBean的getFullMap方法,在該方法里面,我會(huì)將地圖的大小縮放到全圖范圍。代碼我會(huì)稍后貼上來。這就是JSF的事件捆綁到服務(wù)器代碼的功能。普通的一個(gè)button,點(diǎn)擊事件可以映射到后臺(tái)Bean的某一個(gè)方法,在后臺(tái)方法里面執(zhí)行商業(yè)邏輯,進(jìn)行數(shù)據(jù)存取。這個(gè)概念跟普通的Swing程序的事件和監(jiān)聽器機(jī)制十分類似,Java程序員們看了肯定倍感親切。注意,剛才這個(gè)button沒有利用任何ADF的類,在我們的ADF中,所有要建大廈的材料都已經(jīng)給您準(zhǔn)備好,fullExtent功能只需要三行代碼即可實(shí)現(xiàn)。
          事件容易捆綁到服務(wù)器端代碼,這是ESRI選擇JSF作為我們ADF底層的另外一個(gè)重要的原因。

           
          posted on 2007-08-15 15:28 JavaPoint 閱讀(724) 評(píng)論(0)  編輯  收藏 所屬分類: ArcGis
          主站蜘蛛池模板: 南昌市| 迁安市| 江油市| 丽江市| 遂平县| 南郑县| 马山县| 安塞县| 耿马| 济阳县| 石门县| 卓尼县| 三都| 疏附县| 嘉义市| 东丽区| 阜城县| 廊坊市| 阳高县| 敦煌市| 天全县| 星子县| 乾安县| 施甸县| 梨树县| 神木县| 乐平市| 正宁县| 辽宁省| 女性| 桃源县| 普兰县| 南宫市| 鹤壁市| 师宗县| 德格县| 永德县| 西昌市| 三台县| 白朗县| 四川省|