常常有朋友對幾種開發語言進行爭論,有的說Java好,有的說.Net好,還有的說Php好,最後每每是變成了互相***,不歡而散。關於開發語言之爭本質上是技術體系之爭,開發語言也不過是某種技術體系裏構建應用的工具。實際上,對於一個問題每每有多種多樣的解決方案,可能每一種技術體系都能最終實現,但「能不能」跟「好很差」是兩回事,這裏面有個性價比的問題。就象咱們打蚊子同樣,咱們能夠用蒼蠅拍去拍,也能夠用大炮去轟,最後都能把蚊子給打死。大炮威力無比,無所不能,殺傷力極大,但對於打蚊子而言,還真不如蒼蠅拍好用。採用重量級的的Java技術去作Web2.0的網站,就跟大炮轟蚊子的效果差很少。固然,反過來,也有的時候會出現「小馬拉大車,瘦驢拉硬屎」的狀況,好比用Php去開發一個銀行結算系統,確定也能作出來,速度卻是刷刷的,但一種弱類型的語言可能在運行時充滿了變數,又有哪家銀行敢冒這樣的風險,他們寧肯選用比較成熟的Java技術解決方案,速度雖慢,但用着內心踏實。
那麼咱們到底應該選擇什麼樣的技術體系呢?技術體系的選擇,對於一個IT公司而言,主要取決於它的商業目標,反過來講,商業目標須要一個合適的技術體系去推進。好比,公司是作電信項目系統集成的,那就基本肯定以J2EE平臺技術爲主了;若是公司準備運營Web2.0網站,那麼LAMP就是最好的選擇,之後開發的語言就是3P(Php/Perl/Python)了。一個IT公司只有選擇了合適的技術體系,才能更好更快地實現公司的商業目標。對於我的而言,技術體系的選擇,可能會在很長時間內,決定了你的職業發展目標,好比之後你是作網站仍是企業應用,你是作產品仍是作項目。
技術體系的選擇和肯定通常是由CTO或者首架依照公司的商業目標肯定,也有時候取決於客戶或者行業的要求。固然,若是隻以系統實現做爲目的的話,架構師就能夠參與實現技術的肯定了,一旦選定了某種技術體系的話,全部的開發活動都被限定這種技術範圍以內。做爲架構師而言,必須具有較爲寬廣的知識體系,技術體系的基本知識即是其中之一。
如下,我將對Java技術體系、.Net技術體系和LAMP技術體系逐一剖析,重點分析這幾種技術體系的技術特色和適應領域,技術特色是決定適應領域的重要因素。
1. Sun ONE體系架構
Sun ONE(Sun Open Net Environment)是Sun公司爲了對抗微軟的.NET體系架構而推出的,以Java語言爲核心,並基於一系列開放和流行的標準、技術及協議的體系架構,Sun ONE包含了J2SE、J2EE和J2ME 3個平臺,基本覆蓋了應用開發的所有領域。
J2SE(Java 2 Platform, Standard Edition)
Java 2平臺標準版,適用於桌面系統應用程序的開發。
J2EE(Java 2 Platform, Enterprise Edition)
Java 2平臺企業版。利用J2EE平臺能夠簡化企業解決方案的開發、部署和管理。J2EE主要用於構建企業級的服務器應用和分佈式的網絡程序的開發。
J2ME(Java 2 Platform, Micro Edition)
Java 2平臺微型版。Sun公司將J2ME定義爲「一種以普遍的消費性產品爲目標、高度優化的Java運行環境」。J2ME平臺普遍用於嵌入式的消費型產品中,如手機,掌上電腦,智能卡,機頂盒,汽車導航系統或其餘無線設備。
咱們中的多數人從事的是基於J2EE平臺上企業應用的開發,如下重點講述的就是J2EE開發平臺和開發技術。
2. Java技術特色
2.1 安全性
Java平臺從誕生時就充分考慮了安全性的問題。Java平臺提供了基於原始安全模式的沙箱模型。沙箱模型的實質在於信任本地代碼,使其能夠徹底訪問重要的系統資源,而對於下載的遠程代碼則不被信任,所以只能訪問沙箱內提供的有限資源。對於從開放網絡中獲得的不被信任的代碼,該模型提供了一個很是嚴格的使用環境。Java引入了認證器組件,它在.class文件運行前完成該文件的安全檢查,確保Java字節碼符合Java虛擬機規範。Java平臺經過使用認證器查看類文件的句法和詞法的正確性,檢查版本及API符合性等,以保證不突破Java語言的任何限制,能夠被安全執行。這一特色.Net技術體系也都具有,LAMP雖然不具有這麼完善的安全機制,但目前也未發現重大的安全漏洞。
2.2 健壯性
Java語言是一種強類型的靜態語言,運行前必須進行編譯。它要求變量和對象的類型在使用前必須聲明,保證語法沒有二義性,因此生產出來的代碼的在可讀性、可靠性和可預測性方面比較好,儘可能地在運行前摒除系統中潛在的不穩定因素,極大地防止了運行期間出現錯誤。另外,在運行期間的容錯機制,也保證了系統運行期間,不會由於局部問題引起總體的坍塌。象LAMP技術體系中的Php這種弱類型的動態語言,比較缺少企業級應用的所看重的要素,致使最終不能走上企業級大型系統開發的緣由之一。這一特色.Net技術體系的開發語言也都具有。
2.3 跨平臺性
Java應用具備平臺可移植的特性,既能夠運行在Unix/Linux平臺上,又能夠運行在Windows平臺上。操做系統是任何應用的最基礎的支撐環境,Java應用可以運行在Unix/Linux平臺上這一點很是重要,幾乎決定了它的應用領域。能夠這麼說,大多數的系統安全問題都基本上取決於操做系統的安全性。Unix一直被認爲是最安全的操做系統,主要是由於它堅持開放的策略,能夠接受更多技術人員的審查和測試,並且具備很是悠久的歷史。同時,Unix被認爲是穩定高效的操做系統,在安全性、穩定性、高效性等幾個方面要明顯高於Windows Server的。Java應用能夠運行在Unix平臺上,直接繼承了這些優點。這一點對於只能運行在Windows平臺上的.Net要遜色很多,至於像開源的Mono可以實現.Net在Unix/Linux上的跨平臺運行,只能具備象徵意義,並無通過大規模的實踐。
2.4 面向對象
JAVA語言是完全的面向對象的語言,軟件工程的一些最新的思想和理論,大多數都是在Java平臺和開發過程當中最早實踐的,這對於解決大型系統的分析、設計和編程提供了很好的語言級別的支撐。
2.5 其它特性
Java語言具備平臺無關性,它對每種計算機都同樣。好比,簡單的類型都是不變的:整數老是32位,長整數老是64位。使人奇怪的是,諸如C及C++等時髦的編程語言卻不是這樣。因爲這些語言定義如此自由,每種編譯器及開發環境便各有不一樣了,這使程序的移植成爲討厭的問題。Java程序的移植卻很容易,並且不須要進行從新編譯。Java語言相對於傳統語言做了一些簡化,去除了諸如預處理、指針運算、結構、聯合以及運算符過載等語法,還去掉了容易面向對象中的形成混淆的多重繼承等等。固然,這些特性與.Net開發語言C#以及LAMP中的PHP相比沒有特別明顯的優點。
3. Java技術適合的領域
基於J2EE平臺的開發,是比較適合於工業級別的應用開發,象金融、保險、電信、ERP以及電子商務等領域,並且大多屬於基本上屬於大中型級別的業務系統。
爲何Java技術適合於這樣的領域,而不是.Net或者LAMP呢?我總結了如下幾個方面的因素:
1)廠商支持
Java技術適應領域的業務系統的特色:業務邏輯比較複雜,要求系統具備高可靠性、安全性和容錯性來保證交易事務的成功。對於這類行業來說,選擇技術路線的時候通常採用較爲保守的策略,更傾向於選擇成熟的方案、產品和技術提供商,而不只僅是選擇某種語言、某種技術、或者是某種應用服務器的這樣很局部的問題,他們每每須要的是一整套的解決方案。大型軟件服務提供商,象IBM、SAP、ORACLE等等,他們售賣的正是這樣整套的解決方案,從行業諮詢到流程優化,從數據庫到應用服務器,從開發環境到系統部署,從售前諮詢到售後服務等各個環節都很是成熟,並且有不少成功的本行業的實施案例。這些軟件服務提供商的主流產品和對外提供的平臺多數是基於J2EE平臺的,幾乎沒有基於.Net技術體系的產品,LAMP就更不用提了。
2)操做系統
從操做系統的角度來說,Unix的誕生要遠早於Windows操做系統,Windows Server更晚,上述業務領域的多數應用,此前就一直運行在Unix操做系統上。所以,他們基於運營連續性考慮,選擇Unix/Linux操做系統確定是一種比較穩妥的方案。又有哪一個這類企業把之前的系統推翻,所有采用Windows平臺,其中包含的成本和風險,恐怕沒有哪一個企業敢去承擔,並且也確實沒有理由去進行更換。Java應用不只能夠在Unix/Linux上運行,並且在Unix/Linux的表現的確不錯。另外,咱們上面也提到了Unix/Linux操做系統的安全性、穩定性和高效性明顯高於Windows,使得可以運行在Unix/Linux上的Java應用成爲了最好的選擇。
3)技術特色
Java平臺的安全性、健壯性、穩定性以及容錯性是企業級應用開發必不可少的前提。Java語言的的面向對象特性有助於實現系統的可維護性和可複用性設計,它的簡單性又能保證開發的效率和系統的健壯性,這些是C,C++等語言沒法比擬的。
4)開源產品支持
軟件工程的一些最新的思想和理論,大多數都是在Java平臺和開發過程當中最早實踐的。基於JAVA的成熟的開源框架也極好地支持了大型系統的開發,好比經常使用的MVC框架Struts、ORM框架Hibernate、IOC框架Spring。從系統分析、設計、編碼、測試各個環節都有很是成熟的開源框架和工具,並且已經被成功地應用於系統開發實踐中。相似這些產品和工具在.Net技術體系和LAMP技術體系中還沒有造成大規模的實踐。
4. 基於Java技術的Web開發