新的展現(xiàn)層技術(shù)、架構(gòu)與開發(fā)方式
??? 在這里只是簡單的介紹一些企業(yè)應(yīng)用開發(fā)應(yīng)該采納和借鑒的一些展現(xiàn)層技術(shù)、架構(gòu)和開發(fā)方式,之所以稱它們?yōu)樾?,主要是針對技術(shù)和趨勢而言,其實(shí)他們的概念已經(jīng)不算是太新的了(已經(jīng)存在一段時間了),正是因?yàn)槿绱耍鼈兏泳哂锌山梃b的價值。??? 瀏覽器胖客戶端技術(shù):
??? 無論如何說、無論采用何種技術(shù)目前的三層分布式企業(yè)級應(yīng)用也都是網(wǎng)絡(luò)應(yīng)用,它在本質(zhì)上與其他的網(wǎng)絡(luò)應(yīng)用是有相似性的,我們可以在它們之間作一個類比。
??? 就在不遠(yuǎn)的以前,網(wǎng)站的用戶界面也是靜態(tài)的,雖然很多網(wǎng)站提供了服務(wù)端動態(tài)網(wǎng)頁的支持,但是用戶看到的卻還是一張張靜態(tài)的網(wǎng)頁。用戶與網(wǎng)站之間是一個請求 和交互的過程(本質(zhì)上就是這樣,看上去也是這樣),用戶通過超鏈接在一個個動態(tài)/靜態(tài)的頁面之間瀏覽。而所有的處理全部是由服務(wù)器來進(jìn)行的。大多數(shù)能夠即 時響應(yīng)客戶的是Flash或者Applet這種瀏覽器的插件。當(dāng)然客戶端動態(tài)網(wǎng)頁的技術(shù)當(dāng)時也已經(jīng)存在很長時間了,但是并沒有得到太多的重視。
??? 但是,近幾年來,動態(tài)網(wǎng)頁無刷新技術(shù)逐漸興起起來,它充分利用了客戶端瀏覽器所具備的計(jì)算能力,通過借助于DHTML容器的事件機(jī)制和非提交形式HTTP 訪問服務(wù)器的方法實(shí)現(xiàn)了可以在客戶端自行處理用戶請求的基于瀏覽器的胖客戶端,使得使用界面更加友好和易用,而且還在相當(dāng)?shù)某潭壬蠝p輕了服務(wù)器處理的負(fù) 擔(dān)。
???
??? 再拿二層的分布式企業(yè)級應(yīng)用來作縱向比較,雖然抽象出應(yīng)用服務(wù)器這一層對于數(shù)據(jù)庫服務(wù)器是一種解脫(也為SOA打下了基礎(chǔ)),但是由于當(dāng)時的網(wǎng)絡(luò)應(yīng)用的技 術(shù)所限,真正的用戶體驗(yàn)是下降了的,胖客戶端的安裝和升級確實(shí)比較麻煩,但是一般說來客戶端的安裝問題只是部署和維護(hù)企業(yè)級應(yīng)用系統(tǒng)的一個很小的問題。但 對于底層的實(shí)際用戶而言,基于網(wǎng)絡(luò)HTML技術(shù)的客戶端界面可能會好看一些,但是效率、操作性、實(shí)時反應(yīng)的能力都是下降了的。對于底層的用戶而言,鍵盤操 作要比鼠標(biāo)操作工作效率更高。企業(yè)級應(yīng)用的系統(tǒng)是要給企業(yè)做的,而企業(yè)的主要目標(biāo)是創(chuàng)造最大利潤,在這一點(diǎn)上其實(shí)很多三層的企業(yè)級應(yīng)用都是對企業(yè)級應(yīng)用所 要達(dá)成的目標(biāo)的一種背離。但是,這主要是因?yàn)楫?dāng)時的技術(shù)所限,就算是最能代表當(dāng)時網(wǎng)絡(luò)技術(shù)的大型商業(yè)網(wǎng)站,他們的用戶界面也幾乎全是靜態(tài)的HTML網(wǎng)頁。
???
??? 綜上所述,可以看出三層分布式的企業(yè)級應(yīng)用系統(tǒng)應(yīng)該在展現(xiàn)層進(jìn)行一次革新,應(yīng)該盡可能的采用瀏覽器胖客戶端的技術(shù),這樣一方面可以充分利用客戶端的計(jì)算能 力和資源,緩解服務(wù)端壓力,還可以通過快捷鍵、自定義快捷方式甚至自定義宏的方式提高用戶的使用效率和使用體驗(yàn)。
??? 服務(wù)端組件化開發(fā)技術(shù):
??? Struts 是一個很好的框架,它的靈活性和穩(wěn)定性是有目共睹的。但是無論如何它給開發(fā)人員帶來的工作量和調(diào)試起來的難度也是很多的(尤其是在沒有充分體現(xiàn)出分層概念 的企業(yè)級應(yīng)用系統(tǒng)中)。其實(shí)難度最終是要轉(zhuǎn)化到網(wǎng)絡(luò)應(yīng)用的開發(fā)上去的。三層的企業(yè)級應(yīng)用系統(tǒng)也是網(wǎng)絡(luò)應(yīng)用,而對于網(wǎng)絡(luò)應(yīng)用而言,業(yè)務(wù)開發(fā)人員和美工(又叫 WebUI?)人員的分工也是比較頭疼的問題。JSP等模板技術(shù)于是應(yīng)運(yùn)而生,但其實(shí)這不過是一種善意的謊言。對于JSP而言業(yè)務(wù)開發(fā)人員還是必須對 HTML有比較深的了解,而且最頭疼的是,除非你把它放在Web容器中運(yùn)行,否則你決不會知道它到底是一個什么樣子(除非你把你自己的大腦變成一個Web 容器加上一個瀏覽器),JSP Tag的出現(xiàn)并不能解決什么問題,從本質(zhì)上來說它就是JSP概念的一個延展,可以節(jié)省代碼而已(而且?guī)砀嗟膹?fù)雜度)。
??? 難道真的沒有辦法了嗎?
??? 我們縱向?qū)Ρ纫幌露拥钠髽I(yè)級應(yīng)用,它開發(fā)和維護(hù)起來就沒有三層那么麻煩。原因何在?組件已經(jīng)封裝了絕大多部分的工作,你所需要的只是應(yīng)用組件、配置組件、添加事件處理代碼而已。
??? 從這個方面上來說,還有什么DHTML更好的用戶界面描述語言?設(shè)想一下,你可以試圖拿Swing(為什么Swing?——平臺無關(guān))寫一個可以在運(yùn)行時 動態(tài)的改變界面結(jié)構(gòu)、通過樣式描述文件動態(tài)改變組件樣式的程序(這一切可以跟一個或多個很完善的腳本語言無縫集成),它會多復(fù)雜?
??? 還記得桌面應(yīng)用的開發(fā)嗎?沒有一個像樣的桌面程序沒有自定義組件的,但是它們的自定義組件大多數(shù)其實(shí)只是基礎(chǔ)組件的組合。
??? 同理,也可以對HTML進(jìn)行如此開發(fā)。
??? 下面給出解決的架構(gòu)。
??? 展現(xiàn)層開發(fā)架構(gòu):
???? 開發(fā)要明確體現(xiàn)出客戶端、應(yīng)用服務(wù)器端、數(shù)據(jù)庫服務(wù)器端的三層概念。數(shù)據(jù)庫服務(wù)端的開發(fā)與展現(xiàn)層無關(guān)略去不講。
- 客戶端開發(fā):使用JavaScript進(jìn)行事件處理響應(yīng)用戶的操作,對組件進(jìn)行相應(yīng)的操作,如有必要可以采取遠(yuǎn)程服務(wù)器端服務(wù)調(diào)用(既可以調(diào)用自己服務(wù)器提供的服務(wù)也可以調(diào)用其他的公用網(wǎng)絡(luò)服務(wù),符合SOA的要求)的方式。
- 服 務(wù)端開發(fā):展現(xiàn)層組件分為兩部分,動態(tài)網(wǎng)頁組件和JavaScript組件。動態(tài)網(wǎng)頁組件采用基于組件化的動態(tài)網(wǎng)頁框架(比如Tapesrty,為什么不 用JSF稍后再講)。另外服務(wù)端開發(fā)還有業(yè)務(wù)邏輯處理服務(wù),其中業(yè)務(wù)邏輯處理屬于業(yè)務(wù)邏輯層不再多說,而業(yè)務(wù)邏輯處理服務(wù)和服務(wù)的遠(yuǎn)程調(diào)用以及相應(yīng)的安全 處理可以采用Spring + Acegi + DWR的方式(這樣可以既可以實(shí)現(xiàn)JavaScript客戶端遠(yuǎn)程調(diào)用業(yè)務(wù)邏輯服務(wù),還可以很容易的實(shí)現(xiàn)服務(wù)的安全公開化,符合SOA的要求)。
??? 為什么這么看重Tapestry而不用JSF呢?
- JSF 的標(biāo)準(zhǔn)還是跟JSP綁在一塊的,雖然有Facelet的存在,但是本身擺脫不了JSP的JSF還是會被JSP所拖累的。我并沒有說JSP一無是處,作為模 板技術(shù)而言,JSP已經(jīng)非常成功了,但是對于JavaScript胖客戶端開發(fā)而言,JSP本身容器相關(guān)的特性實(shí)在是沒什么好處。
- 目前 而言JavaScript是可以進(jìn)行單元測試的,而Tapestry的Html模板技術(shù)使得JavaScript和Html的集成測試達(dá)到可能。你可以完 全不管Tapestry而調(diào)試JavaScript,調(diào)試成功以后再加上Tapestry的組件標(biāo)簽就可以了。你可以為重要的JavaScript(一些 起粘結(jié)作用的Script就沒有必要測試了)寫測試腳本進(jìn)行測試,而這些全部都是遠(yuǎn)離Web容器的。
??? 我們的開發(fā)人員為什么要遠(yuǎn)離JavaScript呢?因?yàn)樗莿討B(tài)解釋語言?Ruby也是。只要測試到位,動態(tài)語言也可以實(shí)現(xiàn)穩(wěn)定的系統(tǒng)。
??? 運(yùn)行的效率低?也許吧,但總高過整個頁面刷新,我說的不過分吧。
??? 開發(fā)人員對JavaScript認(rèn)識不夠,沒有很好的IDE支持?事實(shí)上,根本不必讓開發(fā)人員對它認(rèn)識“夠”,因?yàn)樗鶎懙闹饕且恍〨lueCode, 配置一下組件,把組件之間通過事件結(jié)合起來。當(dāng)然,這些有一部分你可以自己發(fā)明一些XML來達(dá)到,值得嗎?我個人認(rèn)為寫動態(tài)腳本也好過寫XML(別跟我說 你還可以寫個DTD)。至于IDE的話,我認(rèn)為,寫JavaScript根本用不著,尤其是在你根本不會寫很多的時候。只要有一個瀏覽器和瀏覽器支持的 JavaScript調(diào)試器足夠了。只要組件化做好了,再結(jié)合工程模板,那么開發(fā)人員就象回到了二層的時代,選擇相應(yīng)的組件,組合然后就是調(diào)試了。比兩層 有優(yōu)勢的一點(diǎn)是,他不必啟動服務(wù)器就可以調(diào)試客戶端。
??? 這一方面的網(wǎng)絡(luò)應(yīng)用開發(fā)先驅(qū)是Google(可惜,他們沒用JavaEE技術(shù),呵呵),到現(xiàn)在已經(jīng)成為一種風(fēng)潮,對企業(yè)級應(yīng)用開發(fā)趕時髦是沒有必要的,但 是技術(shù)的發(fā)展帶來了新的可能,不管是在開發(fā)方面還是在客戶體驗(yàn)和客戶效率提高上都會有更好的機(jī)會,為什么不把握這個機(jī)會呢?
??? 末了,SOA完全可以評為今年的軟件開發(fā)最流行關(guān)鍵詞。呵呵。它的核心概念是什么呢?不要浪費(fèi)現(xiàn)有的IT資源。
??? 我們現(xiàn)在對于網(wǎng)絡(luò)和計(jì)算機(jī)技術(shù)的資源開發(fā)和應(yīng)用的大部分都處于浪費(fèi)狀態(tài),有政治原因、有商業(yè)原因但是還有技術(shù)原因。能夠盡可能有效的利用手中現(xiàn)有的資源,對于企業(yè)的發(fā)展也有相當(dāng)?shù)姆e極作用。
posted on 2006-04-19 17:21 guitarpoet 閱讀(1908) 評論(4) 編輯 收藏 所屬分類: 展現(xiàn)層