[引文] 我們需要重新思考Model2的價(jià)值
Posted on 2006-09-08 22:16 BennyBao 閱讀(286) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): AJAX為什么我說(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)型:
- 以?xún)?nèi)容為中心的應(yīng)用,服務(wù)器返回的是一段HTML內(nèi)容。
- 以腳本為中心的應(yīng)用,服務(wù)器返回的是一段JS腳本。
- 以數(shù)據(jù)為中心的應(yīng)用,服務(wù)器返回的是一段數(shù)據(jù),可以是XML格式、JSON格式或者其他文本格式。
上面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)題。