Ajax/REST 架構(gòu)風(fēng)格的新興給使用傳統(tǒng)服務(wù)器端 Web 應(yīng)用程序風(fēng)格的組織帶來(lái)了一些挑戰(zhàn)。盡管與傳統(tǒng)模型相比,Ajax 具有許多引人注目的架構(gòu)優(yōu)點(diǎn),但立即全面轉(zhuǎn)換成純粹的 Ajax/REST 架構(gòu)對(duì)于所有組織來(lái)說(shuō)并不現(xiàn)實(shí)。那些缺乏 Ajax 開發(fā)技巧的組織可向現(xiàn)有服務(wù)器端 Web 架構(gòu)逐漸、增量式地添加 Ajax 功能,從而開始采用 Ajax 技術(shù)。隨著這些組織在 Ajax/REST 使用方面的經(jīng)驗(yàn)逐步增加,他們就可以安心地嘗試更有趣、更有野心的項(xiàng)目。
![]() |
|
Ajax 是一種由一組技術(shù)構(gòu)成的架構(gòu)風(fēng)格。這些技術(shù)本身并沒(méi)有好壞之分;它們都是中立的。只有在某些組織能夠應(yīng)用某種技術(shù)來(lái)解決特定的問(wèn)題或滿足特定的需求時(shí),這種技術(shù)才會(huì)或多或少地有用。因此要回答 “我應(yīng)該使用 Ajax 嗎?” 這個(gè)問(wèn)題,您必須評(píng)估自己的組織正在嘗試解決的問(wèn)題是什么,Ajax 可以對(duì)您實(shí)現(xiàn)目標(biāo)提供怎樣的幫助(還是根本就幫不上忙),以及您的組織是否具有項(xiàng)目成功所需要的恰當(dāng)人員。
我們可能會(huì)納悶,“采納 Ajax” 到底是什么意思。要利用 Ajax,組織并不需要重新編寫使用純 Ajax/REST 架構(gòu)的程序。我建議您從一些小程序入手,逐漸積累一些經(jīng)驗(yàn)和信心,而不是直接立即采用純粹的 Ajax/REST 架構(gòu)。
采納 Ajax 可以意味著完成一些輕量和細(xì)微的任務(wù) —— 可能是重新實(shí)現(xiàn) Web 應(yīng)用程序的一個(gè)小特性,以使其更酷、更具響應(yīng)性。Netflix 電影反饋特性就是這種輕量級(jí)風(fēng)格的一個(gè)例子。顧客可以通過(guò)點(diǎn)擊 1 到 5 星來(lái)快速給電影評(píng)分。每次點(diǎn)擊會(huì)立即更新 它們的 Netflix 參數(shù),并相應(yīng)地調(diào)整推薦電影。
在采納的整個(gè)領(lǐng)域內(nèi),高端采納就是諸如 Google 的 Gmail 和 Maps 之類的應(yīng)用程序,它們已經(jīng)重新定義了 Web 應(yīng)用程序開發(fā)的當(dāng)前發(fā)展水平。這些應(yīng)用程序因其眾多的直觀交互特性、可視化效果和根據(jù)用戶操作和數(shù)據(jù)不斷調(diào)節(jié)用戶界面方面的能力而知名。
設(shè)想一下,如果您為自己的行業(yè)開發(fā)一個(gè)像 Google Maps 一樣精密的程序會(huì)接受到多少正面的反應(yīng),這非常有趣。但應(yīng)該現(xiàn)實(shí)一點(diǎn)。Google 可能是世界上最出色的 Web 開發(fā)組織,因此以它為基準(zhǔn)來(lái)衡量 Ajax 的能力是非常危險(xiǎn)的。不要忘記,Google(明智地)只有為黃金時(shí)間做好準(zhǔn)備后才會(huì)發(fā)布自己的新應(yīng)用程序,因此我們只看到了成功??梢酝茰y(cè),即使是 Google 的天才們偶爾也會(huì)在應(yīng)用 Ajax 時(shí)失敗,我們只是不知道這些失敗而已。
純 Ajax/REST 是一種新的架構(gòu)風(fēng)格,相對(duì)于諸如 JSP(JavaServer™ Page 技術(shù))和 PHP 等較為成熟的 Web 應(yīng)用程序風(fēng)格來(lái)說(shuō),它仍然很難實(shí)現(xiàn)。除非提供下一代的 Web 用戶經(jīng)驗(yàn)是主要需求,而且還有世界級(jí)的 Web 開發(fā)團(tuán)隊(duì),否則您的組織最好像 Netflix 一樣最初 “小規(guī)模地采納 Ajax”,而不是像 Google 一樣 “大規(guī)模地采納 Ajax”。
評(píng)估 Ajax 能為您達(dá)成目標(biāo)帶來(lái)怎樣的幫助
問(wèn)問(wèn)自己,Ajax 編程風(fēng)格有哪些特征使它對(duì)于您的應(yīng)用程序的需求具有吸引力。您的公司正在尋找響應(yīng)性更高的 UI 能提供的生產(chǎn)力增長(zhǎng)點(diǎn)嗎?您希望部署一個(gè)高度動(dòng)態(tài)和個(gè)性化,又具備可伸縮性的應(yīng)用程序嗎?對(duì)于您的目標(biāo)客戶群來(lái)說(shuō),“酷” 會(huì)成為一種具有差異化優(yōu)勢(shì)的特性嗎?所有這一切都是合理的理由,還有些其他方面的理由。關(guān)鍵在于,您必須能夠找到一個(gè)合情合理的采納 Ajax 的理由。下面是 Ajax 可以很好地實(shí)現(xiàn)的 3 種功能:
Gmail 是一個(gè)很好的例子。從外表上來(lái)說(shuō),Gmail 只不過(guò)是另外一個(gè)基于 Web 的 e-mail 應(yīng)用程序,這種技術(shù)已經(jīng)存在 10 年之久了。但是 Gmail 使用 Ajax 做了一些正確的事情。您之前曾經(jīng)由于意外地關(guān)閉瀏覽器而丟失過(guò)未發(fā)送的 e-mail 消息嗎?Gmail 開發(fā)人員仔細(xì)考慮了這個(gè)問(wèn)題,通過(guò)精心設(shè)計(jì),差不多每分鐘都會(huì)將未發(fā)送的消息的一份副本保存到草稿文件夾中。每次都要查找隨時(shí)都會(huì)使用的 e-mail 地址是不是很煩呢?Gmail 開發(fā)人員仔細(xì)考慮了這個(gè)問(wèn)題,基于以前發(fā)送的 e-mail 消息提供了一種精心設(shè)計(jì)的地址補(bǔ)全算法。
“迷人” 對(duì)于外部及商業(yè)應(yīng)用程序來(lái)說(shuō)非常重要,但是對(duì)于內(nèi)部業(yè)務(wù)應(yīng)用程序來(lái)說(shuō)則沒(méi)這么重要。一切取決于環(huán)境。
這三方面的收益會(huì)幫助您的組織取得成功嗎?如果不行,那 Ajax 又提供了哪些其他特別的優(yōu)勢(shì)來(lái)為您的組織的成功貢獻(xiàn)力量呢?如果您現(xiàn)在還找不到有說(shuō)服力的具體理由來(lái)采用 Ajax,那么我建議您暫時(shí)先不要考慮 Ajax 了,直到找到這樣一個(gè)理由為止。如果您的確有這樣的理由,那么請(qǐng)繼續(xù)閱讀本文。
![]() ![]() |
![]()
|
您已經(jīng)確定 Ajax 可以為組織帶來(lái)一些獨(dú)特的價(jià)值,這可以證明為采用這種新興技術(shù)而冒的風(fēng)險(xiǎn)是值得的。本節(jié)將討論如何將 Ajax 技術(shù)成功整合到我們的應(yīng)用程序和軟件開發(fā)過(guò)程中。在下一節(jié)中,我們將討論在 “大規(guī)模采納 Ajax” 技術(shù)開發(fā)時(shí)所需考慮的一些特殊事項(xiàng)。
對(duì)于一種有用的新興技術(shù),沒(méi)有什么打擊能比某個(gè)項(xiàng)目試圖使用這種技術(shù)但卻在眾人的矚目下失敗更嚴(yán)重了。這通常是由于尚不具備足夠的技能,卻一次過(guò)快地嘗試過(guò)多新東西而引起的。但是現(xiàn)在很難找到具有豐富 Ajax 開發(fā)經(jīng)驗(yàn)的開發(fā)人員;這種技術(shù)還太年輕。
為了解決這個(gè)問(wèn)題,開發(fā)組織應(yīng)該通過(guò)在真正的項(xiàng)目上實(shí)施 Ajax 來(lái)逐漸積累使用 Ajax 的經(jīng)驗(yàn),但是先不要在關(guān)鍵特性上嘗試這種技術(shù)。集中精力先將一些小特性部署到真實(shí)的世界中。從錯(cuò)誤中不斷學(xué)習(xí)和調(diào)整。如果試圖過(guò)早地邁出一大步,那么就會(huì)給項(xiàng)目帶來(lái)太多風(fēng)險(xiǎn)。這一步邁得越大,經(jīng)過(guò)一個(gè)完整的設(shè)計(jì)/開發(fā)/測(cè)試/部署周期所需要的時(shí)間也就越長(zhǎng),而這是獲取實(shí)踐經(jīng)驗(yàn)的關(guān)鍵。
這個(gè)建議更適用于那些希望 “小規(guī)模嘗試 Ajax” 的組織;不過(guò)對(duì)于那些希望 “大規(guī)模采納 Ajax” 技術(shù)的組織來(lái)說(shuō),他們也可以通過(guò)循環(huán)往復(fù)的開發(fā)方式從小處入手,正如我們?cè)?“大規(guī)模采納 Ajax 技術(shù)”的特殊考慮事項(xiàng) 一節(jié)中討論的一樣。
找到適當(dāng)?shù)娜藖?lái)設(shè)計(jì) UI 和開發(fā)服務(wù)
設(shè)想一下,您的 Web 開發(fā)人員團(tuán)隊(duì)中有些人在過(guò)去 10 年中已成功交付了很多 PHP、Java 或 .NET 服務(wù)器端 Web 應(yīng)用程序,如果他們可以順利成長(zhǎng)為 Ajax 專家,那的確非常令人興奮,但是實(shí)際情況可能并非如此。盡管我們?nèi)匀辉?Web 開發(fā)這個(gè)領(lǐng)域內(nèi)工作,但是 Ajax 架構(gòu)風(fēng)格和支持技術(shù)需要開發(fā)人員忘卻舊知識(shí),重新學(xué)習(xí)新語(yǔ)言和新模式。這種轉(zhuǎn)型的確 是可能的,不過(guò)需要花費(fèi)一些時(shí)間。
在傳統(tǒng)的服務(wù)器端 Web 開發(fā)中,您需要處理鏈接的點(diǎn)擊和表單的提交,并使用一個(gè)完整的 HTML 頁(yè)面進(jìn)行響應(yīng)。通常一個(gè)工作流都會(huì)跨越很多頁(yè)面,因此服務(wù)器端應(yīng)用程序邏輯必須維護(hù)與瀏覽器之間的會(huì)話。服務(wù)器必須記住整個(gè)應(yīng)用程序一次次的點(diǎn)擊,這樣在用戶與 Web 應(yīng)用程序進(jìn)行交互時(shí),才能提供無(wú)縫的工作流。在 Ajax 世界中,我們從這個(gè) “綠色屏幕” 模型轉(zhuǎn)換成了一個(gè)真正的客戶機(jī)-服務(wù)器模型,其中客戶機(jī)是有狀態(tài)的,而且是動(dòng)態(tài)的,服務(wù)器只需要負(fù)責(zé)提供原子的無(wú)狀態(tài)服務(wù)即可。這種新編程風(fēng)格要求具備客戶端和服務(wù)器端方面的不同技巧。
在客戶端,我們需要那些在長(zhǎng)于 CSS、JavaScript 和文檔對(duì)象模型(DOM)編程的開發(fā)人員。問(wèn)題是大部分開發(fā)組織都宣稱 “我們具有使用 JavaScript 和 CSS 的經(jīng)驗(yàn)”,但那往往是一些微不足道的功能,例如修飾文本和在客戶端進(jìn)行表單的驗(yàn)證。認(rèn)為具有這點(diǎn) JavaScript/CSS 經(jīng)驗(yàn)的服務(wù)器端 Web 開發(fā)人員可以勝任大規(guī)模 Ajax 應(yīng)用程序的工作就像是認(rèn)為會(huì)開車的人就有資格 Daytona 500 賽事一樣荒唐。
這也是為什么從小處入手如此重要的另外一個(gè)原因。我們的 Web 開發(fā)人員現(xiàn)在可能還不具備創(chuàng)建 Gmail 這么重量級(jí)的 Ajax 應(yīng)用程序所需要的技能和經(jīng)驗(yàn),不過(guò)他們應(yīng)該可以在現(xiàn)有服務(wù)器端 Web 應(yīng)用程序上實(shí)現(xiàn)一些小規(guī)模的改進(jìn)。隨著時(shí)間和經(jīng)驗(yàn)的積累,他們逐漸就可以使用 Ajax 來(lái)實(shí)現(xiàn)更加復(fù)雜的場(chǎng)景了。
在服務(wù)器端,Ajax 代表了一種轉(zhuǎn)換,因?yàn)槲覀兛梢詫⒁恍┎灰俗⒛康臅?huì)話管理和工作流狀態(tài)從服務(wù)器上移開了。一旦我們積累了足夠的經(jīng)驗(yàn),Ajax 風(fēng)格的 “有狀態(tài)客戶機(jī)/無(wú)狀態(tài)服務(wù)器” 更容易理解和管理,但是這種架構(gòu)風(fēng)格的改變需要一些新的技能。我們的服務(wù)開發(fā)人員應(yīng)該很好地理解 HTTP 協(xié)議,了解 TEST 架構(gòu)風(fēng)格的知識(shí),并且具備開發(fā)分布式服務(wù)的經(jīng)驗(yàn),例如遠(yuǎn)程方法調(diào)用(RMI)和遠(yuǎn)程過(guò)程調(diào)用(RPC)。盡管 REST 架構(gòu)風(fēng)格與 RPC 有一些根本性的區(qū)別,但是它們所涉及的一些非功能性的基本準(zhǔn)則(邊界安全性、網(wǎng)絡(luò)延遲和非可靠性)都是通用的。
DOM、CSS 和 XMLHttpRequest
(XHR)“標(biāo)準(zhǔn)” 與瀏覽器有很大的不同。那些不希望選擇現(xiàn)有框架來(lái)解決這些差異的開發(fā)人員可能會(huì)花費(fèi)大量意料之外的時(shí)間來(lái)編寫自己的信息管道代碼,以便對(duì)瀏覽器間的不一致性進(jìn)行規(guī)范化。您的信息管道代碼的品質(zhì)在達(dá)到目前可用框架已達(dá)到的品質(zhì)之前,需要有很長(zhǎng)一段時(shí)間。一種可行的框架是開源的 Dojo 工具包(請(qǐng)參看 參考資料)。
開發(fā) Ajax 應(yīng)用程序涉及兩種截然不同的行為:使用 HTML/JavaScript/CSS/DOM 實(shí)現(xiàn) UI 和應(yīng)用程序邏輯,以及使用早已建立的服務(wù)器端平臺(tái)(例如 PHP、J2EE 和 .NET)來(lái)實(shí)現(xiàn)服務(wù)器邏輯。在服務(wù)器端,可以使用以前一直使用的工具。在客戶端,則需要學(xué)習(xí)使用一些新工具。對(duì)于希望支持的每個(gè)瀏覽器,都可能都需要一個(gè)不同的 Ajax 工具包。這里有一個(gè)通用工具功能的列表(請(qǐng)參看 參考資料 中支持兩種最流行的 Web 瀏覽器 —— Microsoft Internet Explorer 和 Mozilla Firefox 的工具的鏈接):
![]() |
|
alert
語(yǔ)句來(lái)定位問(wèn)題所在。但是當(dāng)您開始進(jìn)行大規(guī)模 Ajax 開發(fā)時(shí),就需要為希望支持的每種 Web 瀏覽器來(lái)尋找并學(xué)習(xí)一種 JavaScript 調(diào)試器。XmlHttpRequest
(XHR)監(jiān)視器。XHR 是一個(gè) JavaScript 對(duì)象,它可以與服務(wù)器進(jìn)行 Ajax 風(fēng)格的遠(yuǎn)程通信。XHR 監(jiān)視器使我們可以對(duì)請(qǐng)求/響應(yīng)對(duì)進(jìn)行監(jiān)視,包括它們的頭和內(nèi)容。 在實(shí)際環(huán)境中進(jìn)行測(cè)試
![]() |
|
文檔中也明確提到,如果沒(méi)有開發(fā)人員的努力,Ajax 會(huì)破壞我們對(duì) Web 站點(diǎn)的一些基本期望:例如,后退按鈕、書簽或?yàn)g覽器的 “加載” 控件都有可能無(wú)法正常工作。我所給出的 “從小處入手” 的建議在這里也能提供一些幫助。只要您只使用 Ajax 來(lái)實(shí)現(xiàn)一些增量新特性,它們只會(huì)更新頁(yè)面狀態(tài),而不會(huì)對(duì)導(dǎo)航或工作流造成影響,那么后退按鈕和書簽都不會(huì)有任何問(wèn)題。但是加載時(shí)間可能會(huì)成為一個(gè)問(wèn)題,尤其是當(dāng)我們只在本地開發(fā)環(huán)境上進(jìn)行測(cè)試時(shí)更是如此,此時(shí)網(wǎng)絡(luò)延時(shí)并不會(huì)成為太大的制約因素。
考慮一下:在傳統(tǒng)的 Web 應(yīng)用程序中,當(dāng)用戶點(diǎn)擊一個(gè)鏈接或提交一個(gè)表單時(shí),即使后續(xù)頁(yè)面的加載花費(fèi)了 10 秒鐘,它們也會(huì)從瀏覽器的 “加載” 控件中看到即時(shí)反饋。在 Ajax 應(yīng)用程序中,點(diǎn)擊一個(gè)可以觸發(fā) XHR 請(qǐng)求的控件并不會(huì)激活 “加載” 控件。只在本地開發(fā)環(huán)境上進(jìn)行測(cè)試的危險(xiǎn)在于:HTTP 請(qǐng)求、響應(yīng)和后續(xù)的 UI 更新看起來(lái)似乎都是即時(shí)發(fā)生的,這造成了缺乏瀏覽器 “加載” 反饋機(jī)制貌似也不是什么問(wèn)題的假象。但在產(chǎn)品環(huán)境中,用戶距離服務(wù)器可能會(huì)有成百上千里遠(yuǎn),缺乏這種反饋機(jī)制就可能會(huì)產(chǎn)生困擾并挫敗他們的信心。用戶可能會(huì)納悶:“我點(diǎn)中這個(gè)控件了嗎?讓我再點(diǎn)一下看看。仍然什么都沒(méi)有!”
遺憾的是,即使您在工程方面作出了最大的努力,網(wǎng)絡(luò)延遲依然會(huì)存在,因此我們必須接受這個(gè)事實(shí)。假設(shè)有時(shí)用戶點(diǎn)擊控件和服務(wù)器的響應(yīng)到達(dá)之間存在一些時(shí)間的滯后。當(dāng)用戶作出某種表示發(fā)起一個(gè)遠(yuǎn)程調(diào)用時(shí),瀏覽器會(huì)提供一條即時(shí)反饋,說(shuō)明它已經(jīng)看到了用戶的這個(gè)表示。臨時(shí)禁用控件或顯示一條消息說(shuō)明正在發(fā)生什么,直到接收到服務(wù)器的響應(yīng)并使用這些信息來(lái)更新 UI 之后才刪除這條消息。網(wǎng)絡(luò)調(diào)用是瓶頸所在;編寫需要執(zhí)行很長(zhǎng)時(shí)間的 JavaScript 代碼還比較困難。
問(wèn)題的關(guān)鍵是我們需要在真實(shí)的環(huán)境中進(jìn)行測(cè)試,此時(shí)這些可用性問(wèn)題都很容易發(fā)現(xiàn)。問(wèn)題發(fā)現(xiàn)得越早,相應(yīng)進(jìn)行響應(yīng)的時(shí)間也就越早。
在真實(shí)環(huán)境中進(jìn)行測(cè)試的另外一個(gè)方面是要確保在需要支持的每種瀏覽器的每個(gè)版本上進(jìn)行所有的功能測(cè)試。例如,如果您聲稱要支持 Firefox 1.5 和 2.0 以及 Internet Explorer 6 和 7,那就需要在這些瀏覽器上持續(xù)進(jìn)行測(cè)試?;蛟S這是顯而易見的道理,但開發(fā)人員卻很容易陷入一些懷習(xí)慣:只在自己喜歡的瀏覽器上進(jìn)行開發(fā)和測(cè)試,以后在其他瀏覽器上發(fā)現(xiàn)問(wèn)題時(shí)就會(huì)需要重新修整自己的代碼。
![]() ![]() |
![]()
|
“大規(guī)模采納 Ajax 技術(shù)” 的特殊考慮事項(xiàng)
盡管我們已經(jīng)建議您不要去嘗試創(chuàng)建像 Gmail 或 Google Maps 那樣龐大的 Ajax 應(yīng)用程序,但是有些業(yè)務(wù)或者工程代理可能會(huì)迫使您那樣做。我們的第一反應(yīng)是:不要這樣做 —— 從小處入手,不但積累經(jīng)驗(yàn)。但是如果立即就要構(gòu)建一個(gè)純 Ajax 應(yīng)用程序,就請(qǐng)繼續(xù)閱讀本文。
您的開發(fā)團(tuán)隊(duì)現(xiàn)在就更加重要了,因?yàn)槟皇呛?jiǎn)單地使用新技術(shù)來(lái)擴(kuò)展久經(jīng)驗(yàn)證的架構(gòu),而是要采用一個(gè)全新的架構(gòu)。您的團(tuán)隊(duì)雖然在 Ajax 方面的經(jīng)驗(yàn)很少,但需要作出一些重要的決策 —— 這些設(shè)計(jì)決策可能會(huì)導(dǎo)致可怕的錯(cuò)誤后果。
您需要一些在 JavaScript/DOM 和 CSS 方面具有豐富經(jīng)驗(yàn)的成員。如果沒(méi)有豐富 JavaScript 經(jīng)驗(yàn)的人,就要尋找一些在其他腳本編程語(yǔ)言(例如 Perl、Python 或 Ruby)方面具有豐富經(jīng)驗(yàn)的人。Lisp 或 Scheme 等功能編程語(yǔ)言方面的經(jīng)驗(yàn)也會(huì)很有幫助,但經(jīng)驗(yàn)豐富的 Lisp/Scheme 程序員可能比熟練的 JavaScript 程序員還要稀少。
不要低估良好的 CSS 對(duì)應(yīng)用程序品質(zhì)的重要影響。缺乏對(duì) CSS 的深入理解可能會(huì)導(dǎo)致一些原本不必那樣糟糕、難以維護(hù)的代碼,這會(huì)使得首次或再次重寫代碼更加困難。
重新編寫?你說(shuō)什么?
每當(dāng)您進(jìn)行新領(lǐng)域的開發(fā)工作時(shí),第一次就可以做出正確決策的可能性很小。您可能會(huì)腳步蹣跚地弄出一些難經(jīng)推敲、滿是缺陷的設(shè)計(jì),也可以先從小處著手,然后隨著不斷學(xué)習(xí)新知識(shí)并獲得哪些能做哪些不能做的經(jīng)驗(yàn)之后,再不斷更新設(shè)計(jì)。
Ajax 提出了一項(xiàng)獨(dú)特的挑戰(zhàn),因?yàn)橛脩艚?jīng)驗(yàn)和底層架構(gòu)模式與服務(wù)器端的對(duì)應(yīng)部分有著很大的區(qū)別。在您的 UI 中,可能會(huì)發(fā)現(xiàn)一些細(xì)微但有持續(xù)性影響的瑕疵:后退按鈕并不能像如期工作,當(dāng)用戶調(diào)用遠(yuǎn)程操作時(shí)沒(méi)有太多反饋,等等。遺憾的是,在具備這方面的經(jīng)驗(yàn)并明白必須修改設(shè)計(jì)中的哪些地方以便修復(fù)這些問(wèn)題之前,您很難為這些問(wèn)題設(shè)計(jì)解決方案。
希望重新編寫自己的應(yīng)用程序的另一原因是在您獲得使用 JavaScript/DOM 和 CSS 經(jīng)驗(yàn)的同時(shí),您會(huì)發(fā)現(xiàn)一些新術(shù)語(yǔ)和模式,它們可以帶來(lái)更加簡(jiǎn)明、可讀性和可維護(hù)性更好的代碼。另外,隨著您編寫的代碼越來(lái)越多,您就可以開始著手解決一些通用的問(wèn)題,盡管這些問(wèn)題的通用性還不足以進(jìn)入第三方的框架,但卻足以放入我們自己的庫(kù)中,而不是到處散落于頂層的代碼中。重構(gòu)原來(lái)的代碼從而使用新的庫(kù)代碼,這樣從長(zhǎng)遠(yuǎn)來(lái)看是值得的,不過(guò)需要花費(fèi)一些時(shí)間,而且這種活動(dòng)需要不斷進(jìn)行下去。您會(huì)發(fā)現(xiàn),自己逐漸進(jìn)入了框架領(lǐng)域,這里又有一些自己的問(wèn)題集。
隨著您在大規(guī)模應(yīng)用程序中取得不斷進(jìn)展,就會(huì)發(fā)現(xiàn),很多通用應(yīng)用程序服務(wù)都不是由純粹的 JavaScript/DOM/CSS 或全新的 Ajax 框架(例如 Dojo 和 Prototype)提供的。您要嘗試創(chuàng)建自己的框架級(jí)的代碼來(lái)簡(jiǎn)化新應(yīng)用程序級(jí)功能的創(chuàng)建。這通常不是什么壞事;大部分最好的開發(fā)框架(例如 Ruby on Rails)都已經(jīng)從具體的應(yīng)用程序需求中提取出來(lái)了。但是務(wù)必謹(jǐn)慎;我已經(jīng)警告過(guò),在小范圍內(nèi)采納 Ajax 是可行的,但是大規(guī)模采納 Ajax 會(huì)非常困難 —— 難度可能會(huì)高出一個(gè)數(shù)量級(jí)。支持大規(guī)模采納 Ajax 的設(shè)計(jì)框架級(jí)技術(shù)的難度又會(huì)高出一個(gè)數(shù)量級(jí),尤其是在您剛剛接觸 Ajax 技術(shù)領(lǐng)域時(shí)更是如此。
框架代碼引入了更多層次的抽象和間接調(diào)用,這使得代碼路徑很難理解。經(jīng)驗(yàn)之一是盡可能在具體的應(yīng)用程序?qū)舆M(jìn)行工作,只有在應(yīng)用程序中至少有 3 個(gè)部分都可能會(huì)使用代碼所提供的功能時(shí),才考慮將部分代碼移動(dòng)到一個(gè)框架和可重用的庫(kù)中。
新領(lǐng)域開發(fā)中的一個(gè)主要的反模式就:在最初設(shè)計(jì)和實(shí)現(xiàn)一個(gè)真正的用戶可用并可提供反饋意見的小產(chǎn)品之間需要花費(fèi)太多時(shí)間。因此,在您著手實(shí)現(xiàn)大型的新 Ajax 應(yīng)用程序之前,應(yīng)該先在幾周之內(nèi)提供一個(gè)基本可以工作的展示模型,以便讓用戶開始提供反饋。UI 可能還非常原始,代碼也許并不完美,但如果您在讓用戶體驗(yàn)新應(yīng)用程序之前先花費(fèi) 6 個(gè)月的時(shí)間進(jìn)行開發(fā),結(jié)果也是這樣;惟一的區(qū)別就是,要丟棄的代碼和 UI 都要多上 10 倍。
您需要在很長(zhǎng)的設(shè)計(jì)周期中加速循環(huán)過(guò)程,使真正的用戶一直在一個(gè)仿真產(chǎn)品條件的環(huán)境中體驗(yàn)產(chǎn)品。這種方法的最高境界是搭建一個(gè)測(cè)試服務(wù)器,開發(fā)人員每隔幾天就在上面更新代碼,這樣用戶和項(xiàng)目主管就可以體驗(yàn)新產(chǎn)品并提供反饋了。
![]() ![]() |
![]()
|
采納 Ajax 技術(shù)最大的風(fēng)險(xiǎn)是目前業(yè)界普遍缺乏實(shí)踐經(jīng)驗(yàn)。由于這個(gè)原因,我建議您從小處入手,讓開發(fā)團(tuán)隊(duì)開始積累經(jīng)驗(yàn)并培養(yǎng)自信,這樣就不會(huì)給項(xiàng)目造成太大的風(fēng)險(xiǎn)。如果您決定,現(xiàn)在就集中精力投身于純 Ajax 設(shè)計(jì),那么請(qǐng)現(xiàn)實(shí)一點(diǎn),應(yīng)該理解,這種方式的成功幾率很低。除非您擁有世界級(jí)的 Web 開發(fā)團(tuán)隊(duì),以及可以支持迭代開發(fā)和實(shí)驗(yàn)的開發(fā)組織,否則很可能要失敗。
不過(guò)隨著時(shí)間的推移,事情會(huì)變得越來(lái)越簡(jiǎn)單,風(fēng)險(xiǎn)也會(huì)越來(lái)越低,因?yàn)樵絹?lái)越多的實(shí)踐者會(huì)不斷積累經(jīng)驗(yàn),新的框架、工具和最佳實(shí)踐也會(huì)不斷涌現(xiàn)。Ajax 會(huì)變得更加安全,也會(huì)成為更普及的技術(shù) ……. 不過(guò)這個(gè)階段可能不會(huì)在短時(shí)間內(nèi)到來(lái)。
聯(lián)系客服