javascript
为什么应该避免JSF
長(zhǎng)期以來(lái),對(duì)我來(lái)說(shuō),JSF只是另一個(gè)我不太在乎的Web框架。 這改變了。 在被迫使用了幾個(gè)月之后,我認(rèn)為在幾乎所有情況下,這都是重大的項(xiàng)目風(fēng)險(xiǎn)。 在這里,我提出此判決的理由。
UI和處理邏輯的糾纏不清。 官方教程聲稱以下有關(guān)JSF的好處 :
Java Server Faces技術(shù)的最大優(yōu)點(diǎn)之一是,它為Web應(yīng)用程序的行為和表示提供了清晰的分隔。
情況恰恰相反。 Facelets是JSF的首選呈現(xiàn)技術(shù),乍一看就像普通的模板技術(shù)一樣,例如老式的JSP或Thyme Leaf 。 但是,如果您近距離看,恐懼會(huì)變得很明顯。 在構(gòu)造HTML的同一位置,您還將邏輯放置在操作上應(yīng)更新UI的哪些部分。 我的書中明顯違反關(guān)注點(diǎn)分離原則。
更好的是, 立即屬性可以改變服務(wù)器端的生命周期! 如果這還不夠,則可以根據(jù)使用的標(biāo)簽以不同的方式進(jìn)行處理。 你不能做這樣的事情。
它嘗試抽象您不能抽象的內(nèi)容。 除了一些奇怪的情況,Web應(yīng)用程序的客戶端和服務(wù)器位于相當(dāng)不同的計(jì)算機(jī)上,并通過(guò)某種網(wǎng)絡(luò)分隔開(kāi)來(lái)。 由此得出一個(gè)簡(jiǎn)單的事實(shí):客戶端與服務(wù)器之間的通信緩慢且不可靠。 JSF試圖抽象化客戶端和服務(wù)器的分離。 它以難以控制的方式處理后端上的所有內(nèi)容,從而在客戶端和服務(wù)器之間進(jìn)行瘋狂的通信。 結(jié)果是,由于使用了JSF,各種故障場(chǎng)景都將突然出現(xiàn)。 對(duì)我來(lái)說(shuō),最煩人的就是這個(gè):如果您打開(kāi)一個(gè)JSF頁(yè)面,比方說(shuō)一個(gè)簡(jiǎn)單的搜索頁(yè)面,等待一個(gè)小時(shí),然后單擊“提交”按鈕,您將得到一個(gè)異常,因?yàn)榉?wù)器端狀態(tài)已過(guò)期。 WAT? 為什么瑣碎的搜索頁(yè)面的服務(wù)器狀態(tài)沒(méi)有任何意義? (是的,我知道您可以使用最新版本的JSF更改該行為,但是它仍然是JSF設(shè)計(jì)的工作方式。)盡管從EJB開(kāi)始,每個(gè)人都學(xué)到了以下知識(shí):如果您想對(duì)事實(shí)進(jìn)行抽象,如果應(yīng)用程序有兩個(gè)部分,是否在同一臺(tái)計(jì)算機(jī)上運(yùn)行,??您必須假設(shè)它們不在同一臺(tái)計(jì)算機(jī)上。 其他所有問(wèn)題都隱藏了問(wèn)題,直到問(wèn)題變得如此之大,以至于您可以在早餐中吃掉您的項(xiàng)目。
使事情變得復(fù)雜和復(fù)雜,從一開(kāi)始就很容易。 萬(wàn)維網(wǎng)的體系結(jié)構(gòu)很簡(jiǎn)單 。 簡(jiǎn)單含義:它由一小部分概念組成,且交互作用有限。 這就是它取得如此廣泛成功的原因。 對(duì)于初學(xué)者來(lái)說(shuō),如何使用它來(lái)實(shí)現(xiàn)某些功能也不是一件容易的事。 我相信我們大多數(shù)人都記得他們第一次嘗試在沒(méi)有會(huì)話狀態(tài)的情況下實(shí)現(xiàn)購(gòu)物車之類的東西。 但是幾乎所有這些問(wèn)題的解決方案都是眾所周知的,也是眾所周知的。 您所需要的只是一點(diǎn)閱讀,而您所獲得的是對(duì)如何解決此類問(wèn)題的深刻概念理解。 同樣,基礎(chǔ)非常簡(jiǎn)單:您將請(qǐng)求發(fā)送到URL,并使用HTTP動(dòng)詞發(fā)送一些標(biāo)頭和內(nèi)容。 然后您用一些包含鏈接和一些標(biāo)題的資源進(jìn)行回復(fù)。 而且您在服務(wù)器會(huì)話中沒(méi)有狀態(tài)。 使負(fù)載平衡和故障轉(zhuǎn)移變得相當(dāng)簡(jiǎn)單。 使可添加書簽的網(wǎng)址變得無(wú)關(guān)緊要。 使您的網(wǎng)站可零成本搜索。 使網(wǎng)站易于訪問(wèn)。 允許用戶根據(jù)需要使用其后退按鈕,歷史記錄和標(biāo)簽。 擁有精美的URL變得微不足道
將其與JSF的生命周期模型進(jìn)行比較:用戶提交請(qǐng)求的頁(yè)面將與服務(wù)器端的模型同步,然后驗(yàn)證,轉(zhuǎn)換,生成和處理提交的值。 如上所述,事物發(fā)生的順序,如果發(fā)生的話,則完全由隱藏在偽裝為標(biāo)記的文檔中的XML標(biāo)簽控制。 除了幾乎沒(méi)有人正確理解所有這些內(nèi)容( BalusC似乎是唯一的可用于Interweb的語(yǔ)言 )之外,它還對(duì)您的應(yīng)用程序產(chǎn)生以下影響:URL變得丑陋。 您將看到源資源的URL,而不是您正在查看的資源的URL,因此使這些URL像在膝蓋上的門把手一樣有用。 與緩存,故障轉(zhuǎn)移,負(fù)載平衡等相同。
當(dāng)然,您可以在這里使用一些約定以及那里的其他庫(kù)來(lái)修復(fù)它。 當(dāng)然,當(dāng)您從事物品破碎業(yè)務(wù)時(shí),哪種方案才是最合理的選擇,所以人們必須為修理它而付費(fèi)。 我個(gè)人更喜歡幫助解決實(shí)際問(wèn)題。
阻礙可測(cè)試性:我不能說(shuō)大多數(shù)框架,但可以將Spring MVC與JSF進(jìn)行比較。 讓我告訴你這一點(diǎn):如果有人告訴你JSF可以很好地測(cè)試,那么他可能不知道自動(dòng)測(cè)試。 使用JSF,您可以使用單元測(cè)試來(lái)測(cè)試后端bean。 您可以通過(guò)將應(yīng)用程序部署到服務(wù)器上并使用Selenium來(lái)測(cè)試整個(gè)UI。 基本上就是這樣。
以防萬(wàn)一您想知道還有什么可以測(cè)試:在瀏覽器中加載頁(yè)面的靜態(tài)版本并使用硒進(jìn)行測(cè)試,以便測(cè)試客戶端UI行為。 測(cè)試您生成的標(biāo)記,而無(wú)需啟動(dòng)功能完備的應(yīng)用程序服務(wù)器。 測(cè)試屬性/參數(shù)到bean方法的映射。 在不引導(dǎo)整個(gè)應(yīng)用程序的情況下測(cè)試您生成的標(biāo)記。 使用Spring MVC以及可能使用許多其他合理的服務(wù)器端框架,而使用JSF,這一切都是完全可能的。
再說(shuō)一次:我知道有許多問(wèn)題的修復(fù)程序,但是最簡(jiǎn)單的修復(fù)程序是> 不要使用JSF 。
翻譯自: https://www.javacodegeeks.com/2014/11/why-you-should-avoid-jsf.html
總結(jié)
以上是生活随笔為你收集整理的为什么应该避免JSF的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: win7添加网络打印机共享登录失败怎么办
- 下一篇: 怎样看笔记本的配置如何看电脑的配置好坏