寫這篇Post源於我既做過NET開發又做過JEE開發的經歷在這樣的轉變過程中我對單一平台開發所帶來的思維局限性有了很多清晰卻零散的想法在看了振河兄的頁面間傳遞變量的方法及使用范圍的討論之後我更能體會到在不同的平台進行開發思維方式會是如此之不同原來那些零散的想法也隨之不斷在腦海中湧現讓我有了寫下這篇Post的沖動其實我一直都在宣揚一種觀點技術之間是相通的精於觸類旁通善於聯想是我們程序員應有的優勢我們在專注NET技術的時候不妨在工作間隙休息的時候看看NET外面的世界
提到NET和JEE一般都會想到它們之間兵戎相見水火不容的關系畢竟兩者都在努力地去虜獲程序員的青睐占領更多的市場份額我無意去鼓吹NET是如何如何之強大JEE是如何如何的成熟也無意去探究NHibernateSpringNET等等Project的起源只想從一個程序員的角度去看待兩者在互相競爭的過程當中到底相互借鑒了什麼同時探討一下同時了解兩個領域知識的必要性好讓我們言歸正傳
還記得年初我到了DELL公司實習所承擔的工作任務就是建立一個Web Application供多個有密切聯系的部門使用以提高部門間的協作程度在選擇用什麼技術來做這個Web Application的時候我放棄了比較熟悉的ASP進而選擇了ASPNET正是做這個Project我跟ASPNET乃至NET結下了不解之緣當時第一次接觸到ASPNET第一個感覺就是它比ASP好多了再也不用像寫ASP那樣在HTML嵌套著一堆堆的Scriptlet動態內容的呈現都包含在一個個方法中如PageOnInit()和PageOnLoad()等等這些方法讓我看到Client端JS方法的影子在開發ASPNET頁面的過程中我需要做的就是在頁面中引入不同的Web Control或者是HTML Control這些Controls與HTML標簽是何等的類似除了它有ASP的prefix和那時看起來如Magic一般的runat=server這樣的相似性讓熟悉HTML和JS的我很快掌握了ASPNET的基本應用而我也以極高的效率完成了公司分配給我的任務盡管我對諸如RequestResponseSession和Application這樣的對象並不是十分了解ASPNET所帶來的進步是革命性的難怪有朋友認為ASPNET是NET家族中最為成功的產品了我當時只是拿ASPNET來跟ASP作對比其優越性自然顯露無遺尤其是在控件設計方面的優勢事實上直到後來進入JEE的開發領域我依然對ASPNET的開發方式贊賞有加Microsoft在技術的創新上一直秉持削弱領域開發特性的原則讓開發人員能夠在不同的開發領域中都可以輕松上手游刃有余ASPNET的出現帶來了WebForm而在桌面程序開發中則有WinForm兩者相通的地方隨處可見這讓原有的桌面程序開發人員可以平滑的過渡到Web Application開發中來 ASPNET對於控件在設計以及使用上的支持堪稱完美也為網頁設計人員進入ASPNET開發領域掃除了不少的障礙反觀JEE領域做Swing開發的人員如果要學習Web的開發原有的知識幾乎無用武之地了在這個人氣就是財富的年代在一定層面上求同存異讓開發人員能夠一通百通無疑是一個十分明智的做法JEE領域也開始意識到了這一點將Swing概念應用到Web開發的Wicket Framwork的發布著實是一個極大的進步啊JEE在降低Web開發的難度吸引入門級開發人員方面需要向NET好好請教一番了
好個人經歷接著說年底我進入了一家軟件公司從事JEE的開發工作當時公司技術部門負責人在面試我的時候提到了我缺乏JEE的開發經驗的問題我信心滿滿的告訴他我做過NET的項目而NET和JEE都是專注在企業級應用上的因此肯定會很快上手不會有什麼問題然而後來的工作證明了平台之間的差異性是很大的從NET過渡到JEE並不是一件輕松的事情沒有了熟悉的Web Control取而代之的是簡陋的Tag Library沒有了簡單易用的EventDriven的方法呈現眼前的是doGetdoPostdoHead和service這樣看似丑陋的面孔蛻變的過程是痛苦的但是蛻變帶來了進化開發方式的改變讓我可以從一個更加深入的層面去看待Web開發而我開始重新認識Web ApplicationWeb開發的復雜性在很大程度上源於Http是一個無狀態的連接協議Web Server不管你是Michael還是Jordon只要你在浏覽器上使用了相同的URL就會得到相同的資源在這裡你必須清楚URL到底是什麼的縮寫也許你會站出來反駁我剛才所說的結論但是這種情況在只有靜態HTML網頁的年代是絕對正確的隨著時代的發展資源已經不再局限於靜態的HTML網頁隨之出現了所謂的動態網頁這裡的動態不是指充滿Flash動畫的網頁而是指網頁的內容會根據不同的Request而發生變化雖然Web的內容開始個性化了但是仍然沒有脫離Client發送RequestServer返回Response這樣的模式由於Http是一個無狀態的連接協議為了能夠識別用戶訪問同一資源的狀態在JEE的世界裡我們就得從RequestResponse和Session這樣的對象入手控制這些對象的Life Cycle因此我們哪怕要進行最為簡單的Web應用程序都必須對RequestResponse和Session這樣的對象有充分的了解關注這些基本的對象讓我們對於應用程序的Flow有更為准確的把握能夠更好地進行模塊地劃分便於開發人員進行協作然而在NET的世界裡對Request和Session這樣的對象關注遠不如對Page的關注從振河兄的Post就可見一斑了ASPNET開發降低了開發難度卻在一定程度上阻礙了開發人員對Web Application的整體把握正如春魚兄的Feedback中提到的過分糾纏頁面之間關系不利於系統整體架構的良好設計JEE的應用程序可以讓程序員在Web Application的整體架構上有一個很好的體現NET還是得好好努力啊!建議NET的程序員能夠嘗試著利用JEE的技術來開發一個簡單的Web Application我相信這樣的一個過程會讓你對Web開發有進一步的認識
進入了JEE的領域除了開發方式變了buzz words也跟著改變了兩個使用頻率極高的詞匯充斥著每天的工作一個是MVC另一個則是Framework我感慨於Pattern在JEE中使用的廣泛性感慨於應用實現了MVC模式的Framework竟然可以讓龐大的團隊協同開發一個Project那時的我開始相信Pattern的廣泛應用給軟件開發帶來的變化是巨大而深遠的也開始閱讀《Core JEE Patterns》並從中獲益而在NET的世界裡對Pattern的重視則遠不如JEE盡管這樣的情況在改變說到了MVC不得不對這樣一個份量很重的詞匯做些陳述了JSP的發展經歷了兩個階段JSP Model和JSP? Model在Model中是JSP和JavaBean的結合在一定程度上實現了MVC但是Model與Control之間的耦合仍然普遍存在而Model則真正實現了MVCJSP作為Presentation層負責數據的顯示Servlet充當著一個Request Dispatcher的角色將Request分發至不同的處理Business的模塊中它就是一個指揮官扛著Controller這面大旗而VO則是一個數據的載體是MVC三角中的ModelMVC的概念是進入JEE開發領域必備的從你做第一個簡單的應用程序開始從你看第一篇關於JEE開發的文章開始而豐富的開源MVC Framework也成為了我們學習MVC Pattern的良好教材對JEE有了初步的認識之後就可以選擇一些優秀的MVC Framework來研究了例如WebWork和Spring這對於學習系統整體架構設計方面是大有裨益的
也許物極必反真的是一條不變的真理JEE領域中對於開發Framework的追求可謂之瘋狂大家朝這裡看Wicket Introduction你會發現可以用來開發Web Application的Framework竟然達到了個並且還在日益增加事實上JEE開發的軟肋不在於Control這個層面而是在View許多天才的精力都耗在重復制造輪子上卻沒有想辦法去完善一個或者多個Framework這不得不讓人感到痛心啊!在這一點JEE是不是得向NET好好學習一下呢?在NET的世界裡最受關注的應該是控件的開發了一個設計良好功能強大的控件對於提高開發效率無疑是極好的助推器很多NET的開發人員都將精力花在設計控件上NET就像一個聚寶盆一樣不斷匯聚開發人員智慧結晶在JEE的世界裡為了減少這種資源浪費的情況Wicket Framework的出現了它強調組件設計和組件重用讓開發人員集中精力於組件的開發從而增強Framework的功能已經易用性但願Wicket Framework能夠為JEE世界帶來少許的改變吧!
說著說著真的有點野馬脫缰的感覺了不知道說了半天大家是否明白我真正的用意呢? 在這個技術如此Open的年代NET的程序員應該去了解JEE反之亦然我想相互學習共同進步這句再普通不過的話可以概括這羅羅嗦嗦的數千字吧
From:http://tw.wingwit.com/Article/program/net/201311/15244.html