一定要選擇單一技術(shù)嗎? --做出明智的業(yè)務(wù)決策。基于 Java 技術(shù)、功能強(qiáng)大的基礎(chǔ)技術(shù)和工具構(gòu)建 Web 應(yīng)用程序架構(gòu)
![]() 將某一特定框架作為應(yīng)用程序架構(gòu)是個(gè)具有潛在風(fēng)險(xiǎn)的決定,原因是以后再作改變可能要付出昂貴的代價(jià)。同時(shí),隨著可供我們使用的技術(shù)的不斷發(fā)展,以及新技術(shù)的不斷實(shí)用化,我們希望在不浪費(fèi)以前所有投資的情況下,能把這些新技術(shù)融合到現(xiàn)有的應(yīng)用程序中去。因此,選擇基礎(chǔ)技術(shù)(如 Web 應(yīng)用程序框架結(jié)構(gòu))的評(píng)判因素之一就是在新技術(shù)變得可用時(shí)所選的框架是否包容這些新技術(shù)。 Struts 框架從幾個(gè)不同的方面說(shuō)明了新技術(shù)概念的接受程度。 Struts 與模型層的實(shí)現(xiàn)策略無(wú)關(guān)。在這一層使用任何 Java 技術(shù)都是可以的。在控制器層,為了易于定制和專業(yè)化, Struts 控制器實(shí)現(xiàn)方面的新近創(chuàng)新集中于調(diào)整現(xiàn)行的設(shè)計(jì)實(shí)踐以使之適用于容器上,尤其是要把復(fù)雜的操作分解成易于組合的幾部分。與此同時(shí),操作的標(biāo)準(zhǔn)組合使向后兼容性得到了維持。在視圖層, Struts 早就基于自定義標(biāo)簽提供了可選的視圖層,也是使用類似腳本的表達(dá)式來(lái)把輸入輸出綁定到模型層中相應(yīng)的屬性值的早期改革者。隨著 JSP 技術(shù)的發(fā)展, Struts 已包含了它們。 JSP 標(biāo)準(zhǔn)標(biāo)簽庫(kù)( JSTL )的發(fā)展引進(jìn)了一種標(biāo)準(zhǔn)表達(dá)式語(yǔ)言語(yǔ)法,它比最初的 Struts 表達(dá)式語(yǔ)言更為強(qiáng)大簡(jiǎn)潔。作為回應(yīng), Struts 添加了一組軟件通用型的標(biāo)簽庫(kù),這些標(biāo)簽庫(kù)提供了常見的功能,但允許使用那些與 JSTL 標(biāo)簽(現(xiàn)在,隨著 JSP 2.0 的出現(xiàn),可用在 JSP 頁(yè)面的任何地方)完全相同的表達(dá)式。 可插性 JavaServer Faces ( JSF )的標(biāo)準(zhǔn)化產(chǎn)生了一個(gè)愿望(就應(yīng)用程序架構(gòu)師而言):能夠在基于 Struts 的現(xiàn)有應(yīng)用程序的 JSP 頁(yè)面中使用 JSF 組件。這個(gè)愿望正在通過(guò) Struts-Faces 集成庫(kù)的開發(fā)而得以實(shí)現(xiàn)。 Struts-Faces 集成庫(kù)的設(shè)計(jì)中心是要利用 JSF 中的可插性接口,并在必要時(shí)提供軟件通用型 JSF 組件,以便現(xiàn)有的應(yīng)用程序能夠在視圖層使用 JSF 組件,一次一頁(yè),同時(shí)對(duì)應(yīng)用程序的控制器層和模型層基本上不作改變。(因此,實(shí)現(xiàn) MVC 結(jié)構(gòu)所鼓勵(lì)的有意義的分離鍵值之一;通過(guò)使變更僅在一層中發(fā)生來(lái)在一層中最大限度地降低實(shí)施變更的成本。)在大多數(shù)情況下,需要的惟一變更是對(duì) JSP 頁(yè)面自身,以及配置文件中邏輯映射。 一起部署時(shí), JSF 接收并處理每一個(gè)請(qǐng)求(就像只基于 JSF 的應(yīng)用程序中的情況一樣)。如果請(qǐng)求發(fā)送給服務(wù)器只是為了改變某一 UI 組件的狀態(tài)(例如,在數(shù)據(jù)表中滾動(dòng)行,或者在樹組件中展開一個(gè)節(jié)點(diǎn)), JSF 將在不干擾模型層的情況下,設(shè)法改變組件的狀態(tài)并重新顯示當(dāng)前頁(yè)。這對(duì)視圖層的狀態(tài)變化完全適用。另一方面,如果請(qǐng)求是通過(guò)激活提交按鈕觸發(fā)的,則該庫(kù)集成到 JSF 請(qǐng)求處理生命周期中將導(dǎo)致標(biāo)準(zhǔn) Struts 請(qǐng)求處理生命周期的調(diào)用,包括原來(lái)描述的所有行為。 通過(guò)經(jīng)濟(jì)上可行的遷移來(lái)采用這種新技術(shù)(因?yàn)槿藗儧](méi)有時(shí)間去徹底重寫基于新框架的非平凡應(yīng)用程序)的可能性對(duì)于其現(xiàn)有應(yīng)用程序是基于 Struts 的開發(fā)者和組織來(lái)說(shuō),顯然頗具吸引力。不過(guò),在 JSF 沒(méi)有提供相應(yīng)功能(如對(duì)客戶端和服務(wù)器端表單確認(rèn)的支持)的情況下,它也支持利用 Struts 力量的可能性。 為 Web 應(yīng)用程序選擇應(yīng)用程序架構(gòu)時(shí),檢查框架適應(yīng)不斷變化的技術(shù)的歷史應(yīng)是選擇標(biāo)準(zhǔn)之一。 在 Web 應(yīng)用程序架構(gòu)的發(fā)展過(guò)程中,我們希望把注意力主要集中到技術(shù)細(xì)節(jié)上: API 、標(biāo)準(zhǔn),以及如果用手寫代碼,代碼會(huì)是個(gè)什么樣子。確實(shí),由于若干原因,手寫這樣的應(yīng)用程序現(xiàn)在已經(jīng)變得比較容易了。視圖層頁(yè)面設(shè)計(jì)者只需知道較少的(或根本不需要知道) Java 語(yǔ)言語(yǔ)法就可以加入動(dòng)態(tài)內(nèi)容。將動(dòng)態(tài)內(nèi)容元素綁定到模型層數(shù)據(jù)所需的語(yǔ)法變得更簡(jiǎn)單了,而功能也更強(qiáng)大了,并且隨著 JSF 的出現(xiàn),這種語(yǔ)法已經(jīng)消除了在應(yīng)用于用戶界面的字符串與通常用在模型中的原生數(shù)據(jù)類型之間進(jìn)行顯式轉(zhuǎn)換的必要性??蚣芤呀?jīng)可以消除應(yīng)用程序?qū)ψ陨砜刂破鲗舆M(jìn)行開發(fā)和維護(hù)的必要性。編寫 適配器類 (如 Struts 中的操作,或 JSF 中的操作方法等)變得簡(jiǎn)單多了,限制(如需要的基類)也減少了。 可視化 所有這些趨勢(shì)都有助于提高那些使用文本編輯器之類工具的現(xiàn)有開發(fā)人員的工作效率。不過(guò),有非常多的開發(fā)人員都更愿意在可以對(duì)各種組件進(jìn)行可視化操作而無(wú)需手工編碼的環(huán)境下進(jìn)行開發(fā)。這樣的工具將把開發(fā)者從大量通常所需的細(xì)節(jié)中解放出來(lái),包括從了解 JSP 頁(yè)面中的 HTML 元素語(yǔ)法到了解配置文件中的 XML 語(yǔ)法的各種事情。 在 Struts 框架投入實(shí)際應(yīng)用的這些年里,很多 IDE 都增加了生成基于 Struts 的應(yīng)用程序的能力。典型的增值特性包括 JSP 頁(yè)面的可視化構(gòu)建、頁(yè)面導(dǎo)航層次結(jié)構(gòu)的可視化管理、配置文件的透明生成和維護(hù)。這樣的開發(fā)工具大大擴(kuò)展了潛在的開發(fā)人員群體。他們能夠基于 Struts 構(gòu)建出高質(zhì)量的 Web 應(yīng)用程序。 今天,我們看到提供 JSF 組件的同類功能的工具已經(jīng)開始得到使用。從某種意義上說(shuō),看到工具的這么快就得到使用并不足以大驚小怪—— JSF 對(duì)工具開發(fā)人員(其中很多都參加了導(dǎo)致 JSF 產(chǎn)生的專家組)來(lái)說(shuō)設(shè)計(jì)得很友好,標(biāo)準(zhǔn)組件 API 的出現(xiàn)使組件提供者得以將其組件最大限度地應(yīng)用于更多工具中。但是,我們也看到 Java 平臺(tái)作為一個(gè)整體的激動(dòng)人心的時(shí)刻的開始——將新的開發(fā)人員吸引到 Java 。 全球各地大大小小的組織中,專業(yè)的軟件開發(fā)人員通常以受雇(或簽約)方式開發(fā)支持該組織核心功能的任務(wù)關(guān)鍵型應(yīng)用程序。但一般來(lái)說(shuō),開發(fā)供內(nèi)部使用(特別是用于一小部分員工,如一個(gè)部門)的軟件是信息技術(shù)( IT )部門的職責(zé),并且?guī)缀踉诿總€(gè)環(huán)境中該部門都肩負(fù)著太多的責(zé)任,而開發(fā)和維護(hù)內(nèi)部應(yīng)用程序的人員又太少。因此這類部門中越來(lái)越多的員工以及很多工作組都開始親自學(xué)習(xí)關(guān)于開發(fā) Web 應(yīng)用程序的足夠的知識(shí)以創(chuàng)建供內(nèi)部使用的應(yīng)用程序。 傳統(tǒng)上,這樣的開發(fā)人員都已經(jīng)使用了簡(jiǎn)單的工具和腳本語(yǔ)言,幾乎總是在某種可視的開發(fā)環(huán)境下進(jìn)行開發(fā)。在很多情況下, Java 平臺(tái)對(duì)于這些開發(fā)人員來(lái)說(shuō)難于理解或使用,因此他們不太愛用基于 Java 技術(shù)的解決方案。不過(guò), Web 應(yīng)用程序框架的成熟和標(biāo)準(zhǔn)化的 Java API (如 JSF )的出現(xiàn),為構(gòu)建能夠滿足這些開發(fā)人員需要且基于 Java 的工具創(chuàng)造了機(jī)會(huì)。 Sun Java Studio Creator 是面向這一開發(fā)群體的最典型的一個(gè) IDE 工具。 Java Studio Creator 具有使這些開發(fā)人員即刻提高開發(fā)效率的獨(dú)特特性:由 JSF 組件構(gòu)成的 JSP 頁(yè)面的可視化構(gòu)建;頁(yè)面導(dǎo)航規(guī)則的可視化構(gòu)建; JSF 組件到后端數(shù)據(jù)源的拖放式綁定,這些數(shù)據(jù)源包括關(guān)系數(shù)據(jù)庫(kù)、 Web 服務(wù)和現(xiàn)有的模型層組件,它們通過(guò) JavaBean 屬性來(lái)顯示信息;每個(gè)可視( JSP )頁(yè)面與包含組件引用和事件處理程序的對(duì)應(yīng)的 Page bean 的自動(dòng)關(guān)聯(lián),以及輕松訪問(wèn)整個(gè)應(yīng)用程序基礎(chǔ)設(shè)施的便利方法;在編輯應(yīng)用程序的可視化視圖和相應(yīng)的源代碼之間來(lái)回轉(zhuǎn)換的能力。在一個(gè)視圖中所作的改變將在另一個(gè)視圖中如實(shí)地同步進(jìn)行。 標(biāo)準(zhǔn)化過(guò)程促生了功能日益強(qiáng)大、使用日益方便的 API 。現(xiàn)在,應(yīng)用程序整體結(jié)構(gòu)的最佳實(shí)踐概念已被封裝到功能強(qiáng)大的框架中,使得開發(fā)人員能夠把精力集中到應(yīng)用程序所需的特定邏輯上,而不是內(nèi)部的仔細(xì)推敲上。在可視化的開發(fā)工具中,對(duì)看似復(fù)雜的內(nèi)部概念提供高度抽象以及使那些已經(jīng)熟悉了 Java 的人能夠更快地創(chuàng)建應(yīng)用程序的并行發(fā)展,為開發(fā)新手提供了創(chuàng)建應(yīng)用程序的能力。基礎(chǔ)技術(shù)力量不斷增長(zhǎng)的趨勢(shì),以及開發(fā)工具的不斷提高的易用性,必定會(huì)在今后繼續(xù)下去。決定將 Web 應(yīng)用程序架構(gòu)建立在 Java 技術(shù)基礎(chǔ)之上,現(xiàn)在是將來(lái)也將一直是一個(gè)明智的業(yè)務(wù)決策,同時(shí)也是一個(gè)有利的技術(shù)決策。 本文摘自“基于 Java 技術(shù)的 Web 應(yīng)用程序架構(gòu)的發(fā)展”。 原文出處 http://www./javapro/2005_03/magazine/features/cmcclanahan/ ![]()
|
|