GWT –利弊
我喜歡JavaScript。 隨著jQuery和Mootools的出現(xiàn),我對(duì)JavaScript的熱愛(ài)僅增加了很多倍。 只要有選擇,我就可以將上述框架中的任何一個(gè)用于我開(kāi)發(fā)的任何Web應(yīng)用程序。 但是進(jìn)入服務(wù)行業(yè)后,我不得不一次次屈服于客戶的壓力,并在他們選擇技術(shù)的過(guò)程中努力-這是否是正確的選擇( 向吹笛者付款的人叫the。不是嗎? )。 一位這樣的客戶使我了解了GWT的世界。 如果您是Java的資深人士,并且具有Swing或AWT的經(jīng)驗(yàn),那么選擇GWT應(yīng)該是明智的選擇。 在這種背景下,學(xué)習(xí)曲線最少。 即使您沒(méi)有Java GUI開(kāi)發(fā)方面的經(jīng)驗(yàn),多年開(kāi)發(fā)GWT應(yīng)用程序的經(jīng)驗(yàn)也會(huì)對(duì)您有所幫助 您可以創(chuàng)建高響應(yīng)性的Web應(yīng)用程序,以減輕客戶端的負(fù)擔(dān),并減少與服務(wù)器端的閑聊 盡管有很多JavaScript庫(kù)供人們參考,并且其中大多數(shù)都值得一試,但許多傳統(tǒng)開(kāi)發(fā)人員并不了解它的真正功能。 請(qǐng)記住,像JavaScript這樣的強(qiáng)大語(yǔ)言是一把雙刃劍。 如果您不知道如何使用它,即使您將無(wú)法清理自己創(chuàng)建的混亂 您可以迭代地從典型的Web應(yīng)用程序遷移到GWT應(yīng)用程序。 這不是一個(gè)全有或全無(wú)的主張。 您可以使用一個(gè)名為JSNI的巧妙技巧與已經(jīng)擁有JavaScript函數(shù)進(jìn)行交互。 但是總是最好盡快將它們移至GWT IDE對(duì)GWT的支持再好不過(guò)了。 Java IDE在過(guò)去十年中已經(jīng)成熟,已成為世界上最好的IDE之一,GWT可以直接利用它 您可以殺死集成的調(diào)試美女。 成熟的Java IDE提供的出色的調(diào)試支持是一項(xiàng)功能,該功能可能會(huì)影響任何人的支持GWT的決定。 可以直接很好地利用內(nèi)置的IDE重構(gòu)Java代碼來(lái)始終保持簡(jiǎn)單的設(shè)計(jì)。 用JavaScript進(jìn)行此操作并非出于內(nèi)心的虛弱 至少可以說(shuō),IDE語(yǔ)法突出顯示,錯(cuò)誤檢查,代碼完成快捷方式等不勝枚舉。 Google正在積極開(kāi)發(fā)GWT。 我們知道該項(xiàng)目不會(huì)很快消失。 到目前為止,他們對(duì)項(xiàng)目的承諾充分說(shuō)明了該行業(yè)的未來(lái)。 該項(xiàng)目背后的社區(qū)也是一個(gè)巨大的優(yōu)勢(shì)。 每天在Stack Overflow,討論論壇,Wiki和個(gè)人博客中進(jìn)行討論。 使用正確的關(guān)鍵字進(jìn)行簡(jiǎn)單搜索可以為您指明正確的方向 GWT是一個(gè)經(jīng)過(guò)深思熟慮的API; 而不是趕時(shí)間的東西。 這可以幫助您作為開(kāi)發(fā)人員快速理解抽象并使其真正直觀地使用 您可以使用GWT的內(nèi)置協(xié)議在客戶端和服務(wù)器之間傳輸數(shù)據(jù),而無(wú)需任何其他有關(guān)如何打包和發(fā)送數(shù)據(jù)的知識(shí)。 如果您希望獲得更多控制權(quán),則可以始終使用XML,JSON或您選擇的其他專有格式。 即使在那種情況下,在使用JSON時(shí),您也不必使用非直觀的Java JSON庫(kù)。 您可以使用JSNI通過(guò)簡(jiǎn)單的javascript“評(píng)估” JSON。 太酷了! 您具有可以使用標(biāo)準(zhǔn)Java靜態(tài)代碼分析器(例如FindBugs,CheckStyle,Detangler,PMD等)來(lái)監(jiān)視代碼和設(shè)計(jì)質(zhì)量的優(yōu)點(diǎn)。 當(dāng)您在經(jīng)驗(yàn)豐富的大團(tuán)隊(duì)中工作時(shí),這非常重要。 您可以使用JUnit或Test NG進(jìn)行單元測(cè)試,可以使用JMock或另一個(gè)模擬庫(kù)來(lái)模擬依賴項(xiàng)。 如果您已經(jīng)練習(xí)過(guò),那么遵循TDD是很簡(jiǎn)單的。 盡管有基于JavaScript的單元測(cè)試框架,例如jsunit和qunit,但還是告訴我有多少人已經(jīng)知道或渴望使用它。 GWT編譯器生成跨瀏覽器JavaScript代碼。 今天,任何說(shuō)這話的營(yíng)銷人員都可能被擊敗。 現(xiàn)在,它已成為一種基本必需品,而不是奢侈品 GWT編譯器可以一口氣為您優(yōu)化生成的代碼,刪除無(wú)效代碼,甚至為您混淆JavaScript 盡管編譯過(guò)程需要花費(fèi)很多時(shí)間,但您在開(kāi)發(fā)過(guò)程中不必經(jīng)歷所有過(guò)程。 有一種特殊的托管模式,該模式使用瀏覽器插件并直接使用Java字節(jié)碼生成輸出。 這是您能夠使用Java調(diào)試器調(diào)試客戶端代碼的主要原因之一。 可以通過(guò)許多項(xiàng)目(例如Smart GWT,Ext GWT等)獲得豐富的第三方控件。它們?cè)O(shè)計(jì)精良,易于使用且具有主題性。 因此,如果您有一個(gè)需要不僅僅削減現(xiàn)有控件的要求,那么您應(yīng)該研究這些項(xiàng)目之一。 這些組件之一很有可能實(shí)現(xiàn)。 即使無(wú)法解決問(wèn)題,您也可以隨時(shí)推出自己的解決方案。 GWT強(qiáng)調(diào)有狀態(tài)客戶端和無(wú)狀態(tài)服務(wù)器的概念。 這將導(dǎo)致許多用戶必須共存的服務(wù)器上的負(fù)載極少,而只有一個(gè)用戶在工作的客戶端上的負(fù)載卻很高 I18N和L10N在GWT中非常簡(jiǎn)單。 實(shí)際上,基于語(yǔ)言環(huán)境的編譯由GWT編譯器本身負(fù)責(zé)。 關(guān)于常規(guī)的僅客戶端框架不能說(shuō)相同的話 GWT內(nèi)置了瀏覽器后退按鈕支持,即使在使用AJAX時(shí)也是如此。 如果您是AJAX開(kāi)發(fā)人員,那么您幾乎可以放心。 這是無(wú)價(jià)的。 GWT是一個(gè)快速發(fā)展的項(xiàng)目。 因此,周圍有很多版本。 不贊成使用許多功能,界面和事件,而當(dāng)您要做其他工作時(shí),跟上它們的步伐并不會(huì)太有趣 一開(kāi)始有很多關(guān)于GWT的書(shū)。 這些天沒(méi)那么多。 例如,我沒(méi)有找到關(guān)于GWT 2.0版的很多書(shū)。 這只剩下Google的文檔。 我同意所有文檔都是不錯(cuò)的,但是沒(méi)有什么能比寫(xiě)得好的書(shū)更好 使用GWT并不有趣。 畢竟是Java,而Java不是一種有趣的語(yǔ)言。 如果您添加了整個(gè)布局和自定義控件都應(yīng)使用Java創(chuàng)建的事實(shí),則可以輕松地使成熟的程序員哭泣。 通過(guò)從2.0版開(kāi)始的UI綁定器的引入,該問(wèn)題已得到解決,但是現(xiàn)在您需要學(xué)習(xí)一種新的語(yǔ)法。 Java到JavaScript的編譯速度相當(dāng)慢,如果選擇GWT,這是一個(gè)很大的缺點(diǎn)。 我個(gè)人更喜歡在HTML中定義結(jié)構(gòu)并使用CSS對(duì)其進(jìn)行樣式設(shè)置。 HTML中使用的概念簡(jiǎn)潔明了,而我對(duì)此有多年的經(jīng)驗(yàn)。 但是在GWT中,我被迫使用專有方法來(lái)執(zhí)行相同的操作。 再加上GWT不能解決我不兼容的樣式和對(duì)齊問(wèn)題,這使問(wèn)題更加復(fù)雜。 因此,我很想在GWT中編寫(xiě)布局代碼。 但是從2.0版開(kāi)始,有了UI Binder和HTMLLayout,我感到自己回到了自己的領(lǐng)域 進(jìn)入GWT需要花費(fèi)一些認(rèn)真的承諾,在此之后,更改客戶端技術(shù)可能需要完全重寫(xiě)您的應(yīng)用程序,因?yàn)檫@與其他客戶端框架完全不同 沒(méi)有使用GWT進(jìn)行應(yīng)用程序開(kāi)發(fā)的明確方法。 我們應(yīng)該每個(gè)應(yīng)用僅使用一個(gè)模塊,還是每個(gè)頁(yè)面一個(gè)模塊或介于兩者之間的某個(gè)模塊。 這些設(shè)計(jì)模式直到現(xiàn)在才在緩慢發(fā)展。 因此,通常人們傾向于在一個(gè)模塊中全部開(kāi)發(fā),直到模塊大小超出可接受范圍,然后將其重構(gòu)為多個(gè)模塊。 但是,如果為時(shí)已晚,那么重構(gòu)也不會(huì)那么容易 盡管典型的桌面GUI應(yīng)用程序僅能做到這一點(diǎn),但是聽(tīng)起來(lái)和代碼的混合聽(tīng)起來(lái)并不正確。 但是如今,即使像Flex和Silverlight這樣的桌面應(yīng)用程序框架也采用了基于XML的聲明性方法來(lái)將表示與邏輯分離。 我認(rèn)為GWT 1.x版本具有此缺點(diǎn)。 從2.0版開(kāi)始引入U(xiǎn)I Binder,我認(rèn)為可以克服這一缺點(diǎn),盡管它是另一種痛苦的XML語(yǔ)言, 與其他客戶端庫(kù)(例如jQuery)相比,您通常需要花3倍至5倍的代碼才能完成簡(jiǎn)單的工作 您還應(yīng)該記住,使用GWT時(shí),從HTML的抽象并不完整。 您仍然需要了解您的應(yīng)用程序正在生成的DOM結(jié)構(gòu)以便對(duì)其進(jìn)行樣式設(shè)置,而GWT會(huì)使在代碼中更難看到此結(jié)構(gòu)。 GWT僅對(duì)Java開(kāi)發(fā)人員是一個(gè)優(yōu)勢(shì)。 具有.NET或PHP背景的開(kāi)發(fā)人員在這里一無(wú)所獲 如果您已經(jīng)體驗(yàn)過(guò)JavaScript的強(qiáng)大功能,并且知道如何正確利用JavaScript來(lái)發(fā)揮自己的優(yōu)勢(shì),那么您將對(duì)Java這樣的缺乏表達(dá)能力的語(yǔ)言感到沮喪
在發(fā)布GWT的那幾年,我給了他們幾槍。 那時(shí)我不那么喜歡它,所以我將其關(guān)閉,再也沒(méi)有回來(lái)。 但是,在過(guò)去六個(gè)月的時(shí)間里,我對(duì)該項(xiàng)目框架有一個(gè)稍微不同的印象。 我仍然不能說(shuō)GWT是切成薄片后的下一件大事,但至少它沒(méi)有我想的那么糟糕。 我剛剛記錄了我在項(xiàng)目過(guò)程中的好與壞的觀察結(jié)果,并認(rèn)為一些其他開(kāi)發(fā)人員可能會(huì)在評(píng)估GWT時(shí)發(fā)現(xiàn)它有用。
優(yōu)點(diǎn):
缺點(diǎn):
我相信你們中的許多人會(huì)有不同意見(jiàn)。 差異很好。 因此,如果您有其他想法,請(qǐng)隨時(shí)發(fā)表評(píng)論。 我們將討論...
參考: GWT –我們的JCG合作伙伴 Ganeshji Marwaha在Ganesh博客上的優(yōu)缺點(diǎn)。
翻譯自: https://www.javacodegeeks.com/2012/01/gwt-pros-and-cons.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: 派出所备案的条件是什么(派出所备案的条件
- 下一篇: 弹簧特性