技術體系的選擇之Java篇 王澤賓

來源:互聯網
上載者:User

    經常有朋友對幾種開發語言進行爭論,有的說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開發

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.