熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

RIA+REST如何來化解Java的劣勢

2013-11-23 19:01:23  來源: Java核心技術 
Java的劣勢在何處?與前些年相比現在看的已經很清楚了Java的劣勢就在於做Web表現層的開發Web表現層開發需求變化頻繁Java這類靜態類型的語言不夠敏捷嚴重影響了開發的效率

 而JavaEE的一個最大的缺點就是企圖在服務器端搞定一切我將這種開發方式稱作傳統集中式的開發方式標准的JEE三層架構——Web表現層業務層持久層也許對於傳統的基於HTML表單的Web應用來說是恰當的但是現在已經顯得落伍了JavaEE企圖在服務器端完全搞定Web表現層的開發給自己制造了一個大麻煩無論是從這門語言本身還是從支持這門語言主要的公司SunIBMBEAOracle來說他們並不擅長此道擅長此道的是哪些公司呢?Adobe/MacromediaM$Borland/CodeGear

 如果Web表現層必須要在服務器端開發Ruby on Rails的優勢與JavaEE相比要明顯的多RoR要比任何主流的JavaEE Web表現層框架和技術(StrutsWebWorkSpring MVCJSFTapestryetc)更加靈活學習成本更低開發效率更高

 換個思路來思考如果我們不再假設客戶端就是幾乎毫無智能的Thin Client將會如何?假設我們能夠充分利用客戶端的Ajax組件庫和各種RIA技術將Web表現層完全或者絕大部分前推到客戶端來開發並且通過REST風格的API來與服務器通信那麼服務器的角色就變成了類似於Web服務提供者(注意這裡和Web服務還是有很大的差別因為REST在這裡是用於同一個應用內部的通信即連接一個應用的客戶端和服務器端)的角色這樣就能夠極大地簡化服務器端Java的開發工作讓它從自己所不擅長的領域退出來集中精力做自己最擅長的一些工作

 這個趨勢其實在年多前我在JavaEye論壇中宣傳基於XMLHttpRequest的開發方式的時候就已經看到了現在這個趨勢已經越來越明顯了新一代Web開發方式的面貌已經逐漸浮出水面Adobe AIR/FlexM$ WPF/Silverlight都是這樣一類的開發方式當然Ajax也可以以這種方式來做開發我給這樣一類開發方式取名叫做RIA+REST

 在服務器端搞定一切當然也有好處因為這樣可以獲得最佳的控制安全問題解決起來也比較容易但是其代價就是無法得到最佳的交互設計強迫用戶不得不承受降級的使用體驗如果這樣的用戶體驗是能夠接受的那麼采用這種方式做設計和開發問題不大但是如果這樣的用戶體驗是無法接受的那麼就需要嚴肅地考慮RIA+REST的開發方式了與傳統集中式的開發方式相比這是一類新型的分布式的開發方式在一些方面(交互設計服務器端架構)得到了簡化的同時也會使得一些方面(服務器端的控制能力安全性)復雜化所以要求架構師作出慎重的權衡分布式應用必然會帶來很大的復雜性但是REST無疑是基於Web的分布式應用的最理想的架構風格在Web領域REST的優勢要比RPC和分布式對象等架構風格大的多同時REST是簡練實用的可以很大程度上降低分布式應用的巨大復雜性

 根據我的經驗在絕大多數中小型項目中Web表現層開發的工作量要比後面兩層的開發工作量的總和還要大也就是占到項目開發工作量的一半以上當用戶需要較為苛刻的使用體驗時傳統集中式的開發方式完全無法滿足要求而必須由Ajax來補充然而對於有復雜交互需求的應用來說RoR應用的開發效率同樣也會受到基於DHTML的開發效率的拖累而無法充分體現出其敏捷的優勢

 如果Java將做Web表現層開發的負擔卸掉讓客戶端的RIA技術來承擔那麼Java在服務器端開發中與Ruby相比的劣勢就不是那麼明顯了甚至在很多方面還有優勢從整體架構的開發效率來考慮
RIA + REST + Java
RIA + REST + Ruby
 兩種架構組合也許可以達到大致相同的級別即使Java在開發效率上仍有劣勢但是也不會像在傳統集中式的開發方式中那樣懸殊有很多傳言說基於RoR開發的項目與基於Java開發的項目相比開發效率能夠高出我雖然對於Java並不樂觀但是對於RIA+REST這種新的開發方式我估計開發效率的差距應該可以降低到倍左右不過開發效率只是一個方面如果服務器端的代碼經過良好重構重用性非常好不會在半年之後就成為必須要拋棄的遺留代碼那麼Ruby在開發效率方面的巨大優勢也許只會停留在最初的階段隨著代碼的積累這種開發效率的優勢會逐漸降低下來

 Ruby會不會擁抱RIA呢?RoR 將會是完全基於REST設計的開發框架他們現在擁抱REST就是為將來擁抱RIA做准備對於傳統集中式的開發方式來說應用REST當然也會帶來很大的好處但是我認為這並不是RoR的主要的目的RoR擁抱REST是希望使自己在將來的技術變遷過程中處於一個非常有利的位置對於未來Web開發技術的發展REST處在一個核心的位置它是連接客戶端和服務器端的紐帶REST也會極大影響客戶端架構和服務器端架構的設計和建模面向資源的Web應用將會是未來幾年的一個技術熱點

 Java在對於REST的支持這個方面行動要遲緩的多官方正在制訂的JSR 規范主要還是面向不同的應用之間的集成也就是主要覆蓋SOAP所覆蓋的領域而不是面向RIA+REST這樣一類新型的Web應用開發方式不過一些支持REST的Java框架已經存在也可以基於Adobe的Flex框架(今年之內就會開源)來做設計這些框架使得基於Java做REST設計和開發成為了一件比較容易的事情我們不指望Sun已經有很多年了日子不是一樣過來了嗎?Sun其實可以坦承我不做老大已經很多年了

 綜上所述我認為支持REST對於JavaEE而言意義甚至要比RoR更大是否能夠擁抱未來Web開發技術的發展趨勢對於Java語言未來的命運來說是至關重要的
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26153.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.