posts - 5, comments - 16, trackbacks - 0, articles - 0

          [引文] 我們需要重新思考Model2的價(jià)值

          Posted on 2006-09-08 22:16 BennyBao 閱讀(286) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): AJAX
          收藏一篇DLEE老大的文章,里面的話(huà)句句說(shuō)到了我的心坎里。

          為什么我說(shuō)Struts/WebWork會(huì)受到Ajax的威脅呢?有的人可能覺(jué)得大家相安無(wú)事不是很好,你是不是有神經(jīng)病故意挑起人民內(nèi)部矛盾?問(wèn)題是他們之間確實(shí)存在著一些深層的內(nèi)在矛盾和沖突,這些矛盾才是目前Struts和 WebWork都只能在非常有限的程度上支持Ajax的原因。所以,問(wèn)題是架構(gòu)性的,并不是小型的修補(bǔ)或者更好的編程技巧可以徹底解決的。

          傳統(tǒng)的服務(wù)器端MVC架構(gòu)設(shè)計(jì)(也就是Model2),存在著一個(gè)基本的假設(shè)就是Web應(yīng)用的工作流是由一系列的頁(yè)面切換構(gòu)成的。這種架構(gòu)中的一個(gè)View,從語(yǔ)義上來(lái)講只能代表一個(gè)完整的HTML頁(yè)面。整個(gè)Web應(yīng)用的表現(xiàn)層,被劃分成為非常多的頁(yè)面的組合。

          而Ajax開(kāi)發(fā)者眼里,Web應(yīng)用的工作流并不是這樣構(gòu)成的。Ajax開(kāi)發(fā)者看待Web應(yīng)用的角度與傳統(tǒng)開(kāi)發(fā)者相比差別非常大。在一個(gè)Ajax應(yīng)用中,只有相對(duì)很少的頁(yè)面。每個(gè)頁(yè)面,包括頁(yè)面引用CSS樣式、JS腳本,都是一個(gè)更小型的Ajax應(yīng)用。甚至一些功能簡(jiǎn)單的Ajax應(yīng)用,本身僅僅由一個(gè)單一的頁(yè)面構(gòu)成。例如一個(gè)簡(jiǎn)單的RSS閱讀器,還有IBM筆記本上那個(gè)獲得天氣預(yù)報(bào)的桌面。
          按照Ajax in Action,Ajax應(yīng)用可以分成3種類(lèi)型:

          1. 以?xún)?nèi)容為中心的應(yīng)用,服務(wù)器返回的是一段HTML內(nèi)容。
          2. 以腳本為中心的應(yīng)用,服務(wù)器返回的是一段JS腳本。
          3. 以數(shù)據(jù)為中心的應(yīng)用,服務(wù)器返回的是一段數(shù)據(jù),可以是XML格式、JSON格式或者其他文本格式。
          服務(wù)器返回給Ajax應(yīng)用的3種類(lèi)型的網(wǎng)絡(luò)流量(不稱(chēng)為數(shù)據(jù)是與上面第3種Ajax應(yīng)用相區(qū)別),任何一種都不能被簡(jiǎn)單地視作傳統(tǒng)MVC架構(gòu)中的View,因?yàn)樗麄兏髯运淼恼Z(yǔ)義與傳統(tǒng)MVC架構(gòu)中的View的語(yǔ)義是完全不同的。所以可以看出,除了初次交付給瀏覽器一個(gè)完整的Ajax應(yīng)用之外,傳統(tǒng)的MVC架構(gòu)對(duì)于Ajax應(yīng)用的支持是非常有限的。其實(shí)為了給客戶(hù)端提供上面3類(lèi)網(wǎng)絡(luò)流量,一個(gè)Servlet已經(jīng)足夠了。DWR、JSON-RPC、Buffalo在服務(wù)器端也就是由Servlet實(shí)現(xiàn)的,不要求服務(wù)器端一定要安裝某種MVC框架。
          上面3類(lèi)應(yīng)用,前面的兩類(lèi),客戶(hù)端JS代碼比較簡(jiǎn)單,表現(xiàn)邏輯僅有一部分位于客戶(hù)端,大部分仍然位于服務(wù)器端,因此傳統(tǒng)的服務(wù)器端MVC架構(gòu)仍然是非常有價(jià)值的。但是大家注意第3類(lèi)Ajax應(yīng)用,實(shí)際上它已經(jīng)將絕大部分甚至可以將全部的表現(xiàn)邏輯都轉(zhuǎn)移到客戶(hù)端來(lái)執(zhí)行,這個(gè)時(shí)候服務(wù)器端傳統(tǒng)的Web表現(xiàn)層實(shí)際上被架空了(皮之不存,毛將焉附?)。而對(duì)于Ajax應(yīng)用來(lái)說(shuō),雖然近期可能還是以第1類(lèi)Ajax應(yīng)用為主(例如,所謂的AHAH技術(shù)),但是最有生命力和發(fā)展前景的還是第3類(lèi)Ajax應(yīng)用。

          自從1999年M$推出IE5.0支持XMLHTTP,可以不刷新頁(yè)面以異步方式從服務(wù)器獲取數(shù)據(jù)之后,Web開(kāi)發(fā)的領(lǐng)域就埋下了一顆定時(shí)炸彈(6年以后,一個(gè)新詞Ajax的出現(xiàn)引爆了這顆炸彈)。Model2最初的設(shè)計(jì)應(yīng)該發(fā)生在這件大事(現(xiàn)在應(yīng)該承認(rèn),M$做了一件天大的好事)發(fā)生之前,其設(shè)計(jì)師不可能想到異步請(qǐng)求的價(jià)值。按照Model2的設(shè)計(jì)思想直接產(chǎn)生了Struts。但是后來(lái)的WebWork在最初設(shè)計(jì)階段仍然與這個(gè)技術(shù)失之交臂,這是相當(dāng)可惜的一件事情。WebWork其實(shí)最初設(shè)計(jì)的時(shí)候就可以走的更遠(yuǎn),但是他們只想超越Struts,做一個(gè)更好的Model2 MVC開(kāi)發(fā)框架?,F(xiàn)在他們?cè)傧脍s上這班列車(chē)已經(jīng)有點(diǎn)晚了。如果基礎(chǔ)的服務(wù)器端MVC架構(gòu)的價(jià)值是可疑的,那么其他圍繞這個(gè)架構(gòu)所開(kāi)發(fā)的基礎(chǔ)架構(gòu)的價(jià)值也同樣是可疑的。

          所以在現(xiàn)在這個(gè)時(shí)刻,重新正本清源地思考Model2最初的設(shè)計(jì),它帶來(lái)的Web開(kāi)發(fā)的巨大進(jìn)步,以及它所存在的不足,是一個(gè)非?,F(xiàn)實(shí)的問(wèn)題。

          主站蜘蛛池模板: 金堂县| 石林| 扬州市| 兴宁市| 奉化市| 成武县| 汪清县| 正蓝旗| 平罗县| 南乐县| 乐东| 日喀则市| 义乌市| 民勤县| 镇原县| 曲松县| 泾源县| 拉孜县| 大新县| 富顺县| 五莲县| 和平县| 枞阳县| 朝阳县| 岱山县| 山东| 澄城县| 富源县| 梓潼县| 绥滨县| 武安市| 宿迁市| 合水县| 汤原县| 巴南区| 那坡县| 安溪县| 平江县| 关岭| 四会市| 乌鲁木齐县|