1. 程式人生 > >java的江湖——對基於java的web應用開發之整體認識

java的江湖——對基於java的web應用開發之整體認識

話說在上個世紀九十年代的中期,Internet開始商業化,他所帶來的便利性使人們趨之若鶩,人們尤其是一些大的企業都想用這個東西給自己的工作、生活以及學習帶來便利,但是這個時候計算機的軟硬體環境差異很大,經常會發現你在A環境中開發的軟體系統並不能在B環境中執行,在這樣的大背景下,java攜帶著他“Write Once and Run Anywhere“的理念走進了人們的視野,並廣泛的應用在了web應用的開發中,使用java的applet可以使以前呆板的超文字頁面變得有那麼一絲絲清新與活力。

當時一些大的企業都開始基於java開發自己的企業級應用系統,這些牛逼的程式設計師在開發的過程中發現,像資料庫連線、郵件服務、事務處理等都是一些通用企業需求模組每次都要寫,還和上次寫的差不多(這雖然能夠偷懶,並且輕鬆增加KPI,但是他們可是大神啊,思想覺悟都很高,不能用我等的覺悟來衡量人家),於是就將這些東西封裝成了通用的模組,這樣後人就可以直接使用了,(感謝大神的工作)這的確節省了後來人的開發時間和精力,但是後來的小夥伴們又發現了新的問題,那就是不同公司寫的通用模組,雖然功能相似,但是他們之間還是有一些細微的區別,他們之間不相容,然後幾個傢伙就湊在一起聊:
A:哎,哥們你寫的這個東西的確挺牛逼的,我想用在我們公司的系統中,但是資料介面和我以前定義的差別太大,無法相容啊!
B:你不是難為哥嘛,我寫的時候又沒有和你商量,怎麼知道你的介面是怎麼定義的,不過上次我想用C的東西,一看沒法相容,就只能又苦逼的加班幹了一個週末,本來說陪老婆去度假呢,都沒去成,老婆恨死我了。
A:要是有一個通用的標準,大家都按照這個標準寫,不就不存在這個問題了。
B:嗯,這是個好主意,我明天給頭彙報一下!
於是乎,著名的雷鋒同志sun公司就聯合當時的幾個大碗,比如IBM之流,把這事給辦了。
他們說要搞咱就把他搞得像那麼回事,要不我們先定個框架吧。
於是乎就有了客戶層、表示層、業務邏輯層和企業資訊系統層,然後又定個原則和標準(當然了,以他們的工作作風,早就把安全性、可伸縮性、靈活性、易維護性等都考慮進去了),把大家以前寫的模組重構一下,往這個框架裡一塞,哈哈,牛逼的J2平臺就出來了,在1998年sun向外界宣佈了這個東西的橫空出世,不但出來了,而且還出了SE、EE、ME三個適應不同情況的版本。
這可給一些後生小輩帶來了福音,因為他們把前輩搞好的東西往一塊一湊,再加上自己公司的業務邏輯,一個牛逼的企業版web應用就出來了,還能跨平臺,想在那裡部署就在那裡部署。小夥伴們帶著眼鏡滿世界飛,到處部署自己的系統,享受著外行人無比羨慕的眼光。
(這小子簡直就是天才啊,隨便搗鼓搗鼓,在控制檯輸入幾個命令,這個系統就能用了,真牛逼,不怪人家工資高待遇好,咱沒有那個能力啊!)
(其實這時小夥伴們心裡暗笑,呵呵,其實我也是凡夫俗子,只不過我有牛逼的前輩啊!)
這一時期,J2EE可謂是風靡大千世界,就連遙遠的東方世界,china都很流行,書店裡滿是介紹J2EE的書,大學裡學生聊天滿口都是JDBC、JNDI、EJB,RMI。你要是問一句EJB是什麼東東,馬上就會看到滿世界都是鄙視的眼光,以及嘲諷的微笑,還有人輕輕的拍著你的肩膀說,小夥子你out了。
然而好景不長,總有一些初生牛犢不怕虎的小輩喜歡挑戰權威,2001年,澳大利亞墨爾本一位名為Gavin King的27歲的程式設計師,就是這麼個人。
Gavin:“老闆,我總覺得開發的效率太低了,我用了EJB的Entity bean 1.1時,我總覺得我浪費了好多時間在處理Entity Bean的體系架構上,卻沒有花時間在核心業務邏輯的開發上,而且CMP給我們的限制太多了”。
  老闆:“Gavin,別傻了,EJB是業界的標準,也是最流行的技術,而且我們公司是IBM的合作伙伴。如果有問題,問題就是我們還沒有適應這樣的開發模式”。
  Gavin:“不,我覺得肯定有更好的解決的方案。我們可以設計出比Entity Bean更好的方案”。
  老闆:“哦,Gavin,我知道你很聰明,開發水平也不錯。但是開發這樣的系統太難了,而且你根本就沒有用SQL開發過任何資料庫系統。不要想這樣一個不現實的目標啦!”
  Gavin皺了皺眉,說道:“不,我相信我有能力開發出這個系統。我的想法絕對是可行的。”
  Gavin King是一個倔強的傢伙,然而他也是個人才,也許他的老闆做夢也想不到兩年以後,這個小夥子開發出了Hibernate這個產品,它成為當時全世界最流行的O/R Mapping工具。
  這個Hibernate,他的本意是冬眠,就是讓資料去冬眠,等待春暖花開,被春日的陽光喚醒,說白了就是資料持久化。其實它是一個十分輕量級的物件關係對映框架,有了它,程式設計師就可以不用知道什麼sql,什麼資料庫的併發與死鎖,只需要操作物件,就可以完成資料的增刪查改。哇,還有這樣的好事,這簡直就是我等資料庫程式設計經驗欠缺的小白們的福音啊!
  是的,Gavin做到了,在2004年Sun領導的J2EE5.0標準制定當中的持久化框架標準正式以Hibernate為藍本。
  另一個傢伙叫Rod Johnson,對Java EE 系統框架臃腫、低效、脫離現實的種種現狀提出了質疑,並積極尋求探索革新之道。於是,經過不懈的努力,在2004年3月24日,一個叫Spring的東西誕生了。Spring是什麼?舉個形象的例子,最近中國的軍隊在搞改革,成立了很多新的單位,其中有一個叫“聯合作戰指揮中心”的東西,和Spring有點類似。如果說要打仗了,上層告訴聯指,“你給我把那個該死的小島拿下了”,那麼聯指就要考慮了,我面對的敵情是什麼,應對這些情況需要多少、以及哪些種類的作戰力量,我要不要把最新的殲-20用上,航母需不需要等等,還有這些力量之間怎麼協調配合,遇到什麼情況應該怎麼處理,聯指裡一幫小夥伴就會搞出一個詳細的作戰方案,然後把上層交給的這個任務給拿下了。那麼,Spring就是web應用構建過程中的聯指,老闆指示我要搞一個這樣的系統,這個系統要能夠完成什麼任務,然後Spring掏出他的小本applicationContext.xml,把需要什麼框架、技術,比如Struts、Hibernate等,這些都記在這個小本上,然後按照Spring的規範要求,讓一幫小夥伴在不同的切面上進行程式設計,而整合、協調的事就交給Spring來完成了,最後老闆交給的任務就在spring的組織下完成了。這就是牛逼的Spring。
  那麼就有人要問了,這麼複雜的工作他是怎麼做到了,具體細節的實現是Rod Johnson的事,咱們就不要瞎操心了。不過它使用了兩個最基本的思想和技術確實很值得大家學習的,什麼呢?第一,就是面向切面程式設計,傳說中的AOP;第二,就是控制反轉,傳說中IOC。AOP就是讓專業的人幹專業的事,比如你做日誌採集,那麼你就專心搞日誌採集,其他的事情你不用管,在這個分工日益精確的現代社會,這種思想很得人心。但是,光分工還是不行的,你總要和其他模組配合起來才能完成任務吧,比如,剛才說的日誌採集,就需要把相應的程式碼部署到需要各種模組上去,這種協作配合的工作是怎麼實現的呢?這就要說到第二個東東,IOC,控制反轉,這是那個沒文化的傢伙起的名字,簡直讓人不知道他是什麼意思。其實啊說的簡單點,就是把某一介面具體實現類的選擇控制權從呼叫類中移除,轉交給第三方決定。當然了這個第三方就是Spring框架,在這樣的情況下,各個模組中的介面都可以專心的幹自己的事情,而且需要呼叫那個介面,直接用就行了,並不要關心這個介面的實現類是誰,這些都在Spring的配置過程中確定了,就是這麼牛逼,所有的事情都這樣輕鬆的搞定了。
  當然了,還有一個叫Struts的框架,也被設計出來改進J2EE,他呢比較簡單,純粹是為了滿足MVC這個模式。人們在軟體開發的過程中發現一般的軟體都包括資料模型、檢視和控制這三個模組,如果把這三個模組分開,各自負責自己的事情,這樣的程式就十分的清晰,有利於維護和發展。這就是MVC設計模式,那Struts就是把MVC設計模式在web應用開發過程中進行具體實現所形成的一個架構。
  以上這三個東西組合在一起,就是傳說中的SSH,在web應用開發界就火起來了,盛況不亞於J2EE剛出來的時候,即便是現在,也有很大一部分web應用的開發人員使用SSH這個架構。但是隨著web應用變得更輕、更小,人們仍然不滿足已有的框架帶來的便利,仍然想讓自己的工作變得更簡單(所以有人說人類的懶惰才是推動科技發展的原動力),一群更懶的人有在用SpringMVC代替Struts,用MyBatis代替Hibernate,形成了新的框架——SSM,而且這個框架也在逐漸的流行起來。
  也許這就是軟體開發領域的江湖,再牛逼的技術也只能獨領風騷三五年,然後就會被後輩無情的拍死在沙灘上。而這也正是這個江湖的魅力,他吸引這一代又一代仁人志士遨遊其中。今天的故事就講到這裡,再見
  (本文所有情節純屬虛構,對各種技術理解不深的地方還請大神們批評指正!)