<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    零雨其蒙's Blog

    做優秀的程序員
    隨筆 - 59, 文章 - 13, 評論 - 58, 引用 - 0
    數據加載中……

    J2EE與.Net概述

    ?? (零雨其蒙原創,轉載請注明)
    ??? 是驚喜抑或是困頓,在過去的
    20 年間 IT 界發生了很多變革,生產力和理論都取得了突飛猛進的發展。這比更早時候的發展更加迅速, Oreilly 公司畫出了一幅從 1954 Fortran 2003 Python2.3.1 出現的程序語言發展的清明上河圖。 1990 10 月, Tim Berners-Lee 發明了 WEB ,之后世界變得異常精彩, 1995 年是偉大的一年,第一個用 Perl 語言編寫的 CGI 誕生了, Netscape 發布了 JavaScript Rasmus Lerdorf 發明了 PHP Sun 發明了 Java Matz 發布了 Ruby 。從那一年開始,你可能會發現兩件事,一件是 Web 開發會成為未來的主流,一件是軟件工業開始在創新和完善中趨同。程序語言是相似的,語法有 C 1971 年), Pascal 1970 年), Basic 1964 年)幾大風格流派,而程序開發的思想卻基本上是 Pascal 之父 Nicklaus Wirth 所言“算法 + 數據結構 = 程序”。 1965 年出現了 OO 理論, 1967 Simula 實現了 OO 理論, 1980 年帶著 Class (類)的 C 語言出現, 1983 年, Bjarne 創造了 C++ 。而真正讓 OO 開始“飛入尋常百姓家”的卻是 Java ,而 2000 Delphi 之父 Anders Hejlsberg 產下了第二個孩子—— C# C# .Net Framework 全面模仿 Java ——其實這么說也有失公允,虛擬機的思想來源于 Pascal ,其他優秀的風格來自 C\C++ ,而 C# 則借鑒了 C++ Java VB Delphi 等語言,其實可以說是借鑒了程序語言發展 50 年的廣泛經驗。另外對于方法論的研究,軟件工程學的研究,也都取得了不小的進步。從 1970 Winston Royce 博士引領的瀑布模型到后來改進的 V 模型,到 UP AM ,我看到的是業界的經驗越來越豐富,而對于方法的迷信在不斷的降低,而務實的方法越來越受到歡迎,從敏捷宣言的“工作的軟件勝過面面俱到的文檔( Working software over comprehensive documentation )”即可看出。在 Java 的世界里,人們樂于討論各種各樣的思想,制定各種各樣的標準,而在 Microsoft 的世界里,則都是總結行業數十年經驗的產品。

    ??? 說這些只是為了引出本文的兩個基本觀點,一是相信業界幾十年經驗的總結,方法論、模式與反模式、框架、藍圖、產品;二是遵循“循證”原則,不相信任何官樣文字,不崇拜任何泥塑偶像,凡事以實際出發,而不是墨守成規的遵循所謂規范。在相信與不相信中取舍是困難的,本文所選的主題是在 .Net J2EE 兩大平臺中選擇其一作為廣州港信息化架構平臺。正是基于業界數十年發展的經驗的總結和“循證”思想, .Net J2EE 越來越趨同。這意味著只看廠商的宣傳和書本的講解很難做出抉擇,而且往往是不可信的。

    ??

    想要正確理解 J2EE .Net 就必須深入到其背后,了解其產生的背景,盲目崇拜規范或使用產品( J2EE 歸根到底還是使用其產品)就會造成嚴重的后果, Rod Johnson 在《 Expert one-on-one J2EE Design and Development 》中指出由于人們過于迷信 Sun 制定的 J2EE 規范,而沒有考慮到實際情況(盲目使用分布式計算,不合時宜的使用 EJB ,特別是實體 Bean )。

    行業背景

    促成如今 .Net J2EE 當然還包括 RoR LAMP 群雄割據的原因自然是業界對于軟件解決實際問題的呼喚,而這些技術滲透的思想包含業界數十年的經驗, OO 技術(光是信息隱藏就爭論了十幾年)、中間件技術、 Web 技術、 n 層結構,而如今這些爭論越來越趨向于統一,下面分而述之:

    n???????? OO 技術

    面向對象絕對是編程思想的一次革新(相對于面向過程的結構化思想),我沒有趕上 C/C++ 橫行的年代(雖然在某些場景下它們依然橫行),因此對某些思想上轉變時的痛苦感覺并不深刻,盡管核心思想(跟我見過的一些中國的教科書上說的不一樣)的轉變頗費了一段時間。《 Code Complete 》說學習面向對對象首先要理解 ADT ,而在《編程高手箴言》中我看到了對于重載方法在編譯碼層次上的實現,并且明顯感到作者對面向對象的理解體現在技術本身(這種技術實現的原理),對于 C 程序員甚至是 C++ 程序員而言,往往直接操作數據結構和內存等(比如指針和鏈表),所以理解 ADT 算是思想上的革命了。正如前面所說, C++ 程序員總是能看到 VMT 這樣的技術原理,我認為在進行 OO 編程時應該暫時忘掉這些,因為它將阻礙你理解 OO 設計思想。

    我認為 OO 的核心是對于對象的理解,而并非重載、繼承之類的具體技術,站在對象的角度思考問題是思維方式的變革,是非常苦難的。然而不幸的是,我見過的多數使用 OO 技術的人并未真正理解對象,而只是機械的使用類( Class ),重載等技術,這些 Class 其實并非真正的類,只不過是堆積大量沒有任何實際含義的容器(比如將驗證用戶帳號信息和保存訂單放在一個類里)。沒有實際含義的類(有實際含義的類就像 Customer 類中只包含消費者自身的行為,而不應該出現保存訂單之類的行為,那應該交給 Order 類)和結構化的程序沒有更多本質上的區別,同樣是難以維護的(這里主要指程序不是自明含義的)。

    業界的實踐已經證明了 OO 是設計復雜系統可行的好的方法,而真正用好 OO 并非易事,正確使用設計模式是有效的方式。然而知道設計模式(能背誦 Gof 23 Design Pattern )和理解設計模式(這本身已經不容易,因為不了解 OO 的基本技術如接口,繼承,多態等并且沒編寫過相關程序,閱讀并理解設計模式和其范例是不可能的)與靈活運用設計模式不是一個層次上的。盡管設計模式是從實踐中總結出來的解決特定問題的方法,而且優秀的程序員都是這樣進行設計編程的,然而我們身邊到處都是不優秀的程序員。

    理解 OO 設計思想比理解 J2EE 架構重要的多,正如 Rod Johnson 所說:我們使用 J2EE 實現 OO 設計,而不是讓我們的 J2EE 來支配對象設計。使用了 J2EE 平臺(實際上是使用了 WebSphere Jboss 這樣的產品)并不意味著能解決復雜的企業級問題,關鍵在于你怎么做。

    n???????? 中間件技術

    中間件技術起源于 1980 年左右,其作用是屏蔽 OS 的復雜度,為應用程序提供企業級服務,比如事務管理、安全管理、并發控制、分布式管理等,按照 IDC http://www.idc.com )的分類方法,中間件可分為六類,第一類是終端仿真 / 屏幕轉換中間件,第二類是數據庫訪問中間件,第三類是遠程過程調用中間件,第四類是消息中間件,第五類是交易中間件,第六類是對象中間件。

    最初的中間件是基于遠程過程調用( RPC )的,通過遠程方法可以透明調用實現分布式的通信計算,雖然這一代的中間件沒有 Web 的支持,但是其 RPC 的思想得到了廣泛的應用,在后來的中間件中也得到了繼承;九十年代初出現了消息中間件,通過消息傳遞和消息隊列的方式實現基于多協議的可靠消息傳遞機制,主要的產品有 IBM MQSeries BEA MessageQ ;而交易中間件則是致力于管理大型的事務處理的,當前成熟的 BEA Tuxedo 就是其中的代表,交易中間件通過 XA 規范接口與資源管理器進行交互,并且通過二階段提交協議進行事務管理;正如前面提到的面向對象的中間件是 OO 技術的應用,九十年代初 OMG 提出了以 CCM 為基礎的 CORBA 規范,還有就是 Sun 提出的以 EJB 為基礎的 J2EE 規范和 Microsoft 提出的 .Net 平臺。

    n???????? Web 技術

    1990 10 月, Tim BL NeXT 平臺上開發出了世界上第一個圖形界面的超文本瀏覽編輯器,名字就叫“ World Wide Web ”,同時 Tim BL 依照 SGML 標準,開發出了 HTML Hypertext Mark-up Language ,超文本標記語言)! 1991 年的 8 6 (美國時間), Tim Berners-Lee 在當時的 alt.hypertext 討論組上正式向全世界介紹了他的 WWW 計劃,從那一天開始, Web 開始走向世界化。

    為了滿足人民群眾日益增長的物質文化需求, Web 技術不斷推陳出新,回顧這段歷史是很有意思的,同時也是有意義的,它會讓你知道每種技術為何而生,以便更有效的利用它。 1995 年誕生的打響了動態腳本語言的第一炮,隨后 1996 Microsoft 推出了 ASP 1997 Sun 推出了 Servlet 1998 年又推出了 JSP 2003 Microsoft ASP 升級為 ASP.Net 2005 年出現了 Ajax 。越來越多的基于 Web 的應用系統被創建,從簡簡單單的以展示內容為主的網站變成了需要處理復雜業務邏輯的大型系統, Sun Microsoft 采用了幾乎相同的手段,來滿足這些需求。

    J2EE 概述

    J2EE 就是在這樣一個大背景下誕生了。 J2EE 主要組成部分有 J2EE 平臺, J2EE 規范( Platform Specification ),參考實現 (Reference Implementation) ,兼容性測試套件( Compatibility Test Suite )和 J2EE 藍圖( J2EE BluePrints )。

    J2EE 規范

    對于 J2EE 規范,有一個中英文的細節是, J2EE 規范的“規范”用的詞不是 criterion 而是 specification ,我們知道 specification 是指軟件過程設計階段的規格說明書,而 J2EE Specification 就是一個使用 Java2 語言,構建企業級應用系統的設計規格說明書,它包括了整個企業系統的架構,以及各種中間件如何設計,細化到了每個 API 是如何設計的。如果把 J2EE 這個中間件看成一個應用系統,那么二十余年的行業經驗就是它的需求( Require )文檔, J2EE 規范就是設計( Design )文檔,而實現( Implement )的結果就是 J2EE 平臺。需求和設計是由 Sun 完成的,而實現則是由廣大中間件廠商完成,這些廠商當然也包括 Sun 自己。

    ?

    J2EE 平臺

    根據 IDC 早期的一份報告顯示,企業用戶的需求要求各種中間件進行整合,也就是說各種中間件分開來還不能夠滿足其需求, J2EE 平臺正是這樣的一種產物。它首先是一個對象中間件(按照面向對象設計思想設計的,比如 EJB 這樣的對象),同時包含了消息中間件( JMS ),數據庫訪問中間件( JDBC ),遠程過程調用中間件( RMI JNDI ),交易中間件( EJB JTA/JTI )。 J2EE 是第一個將這些中間件整合在一起的強大的平臺,我們使用的就是一個現成的,用 Java 開發的中間件軟件,不同的廠商使用同一個規格說明書來生產自己的 J2EE 平臺,比如 Sun 自己的 J2EE SDK IBM WebSphere BEA WebLogic ,還有很多開源的實現比如 JBoss Lomoz 等。而且 J2EE 平臺也包含針對 Web 系統的內容, Servlet JSP 。隨著技術的發展,大量的新技術也都加入到了這個平臺,比如 XML Web Service 等。

    J2EE 藍圖

    ?? J2EE 藍圖包含了對在 J2EE 平臺上進行企業級應用系統設計的指導,同時還包括了一個 Demo 程序及相應的文檔。在藍圖中 Sun 給出了 J2EE 的分層模型,即表現層、業務邏輯層、持久層和 EIS 層。表現層中主要是 Web 層,當然還可能是其他軟件,比如 Swing 程序。我們可以看出 J2EE 部分組件的構成也是根據該模型給出的,比如面向表現層的 JSP/Servlet ,面向業務邏輯層的 Session Bean ,面向持久層的 Entity Bean JDBC JTA ,面向 EIS 層的 JCA JAX-RPC 等。

    ?

    理解 J2EE 的全貌需要從上面三個宏觀方面進行,每個方面都是看 J2EE 的一個角度,它們互相補充。 J2EE 為我們提供很好的解決問題的方法,如果你清楚每種中間件的作用,以及那些時髦的新技術名詞,你將很清楚我所說的指什么,在此就不多贅述了。

    很好的使用 J2EE 平臺為我們服務,就如同 Rod Johnson 所言:我們應該以任務驅動,而不是以 J2EE 技術驅動。因此理解面向對象、理解三層結構、理解 Web 開發、理解中間件技術都是比理解 J2EE 規范、 J2EE 平臺、 J2EE 藍圖更重要的事情。特別是 Spring Hibernate 等輕量級框架的出現, Rod Johnson Martin Fowler Robert Martin 的主張以及敏捷方法的興起,一種更加務實的態度和做法正在被重視。 Rod Johnson 在自己的三本著作中都在大聲批判 J2EE 規范中的一些組件,比如認為 Entity Bean 是徹底的失敗, EJB 是不建議使用的超級復雜的重量級解決方案, JNDI 也不是每次都要使用, IoC CMP 更具有明顯的優勢,并很不給面子的說 J2EE 規范專家組的成員對實際應用并不在行,而應該把這些交給上千成員的社區等,這些都是從實踐中得出的結論,而讓人興奮的是 Sun 的專家組已經聽取了大家的建議,在 EJB3.0 規范中已經大大的簡化了 EJB ,也引入了 IoC 等新的理念。

    對于 J2EE 的使用我見過四種人,第一種是根本不了解 J2EE ,以為使用了 WebLogic WebSphere 這樣的 J2EE 中間件軟件就是使用 J2EE 了,完全沒有用到容器提供的各種企業級服務,比如連接池, JTA ;第二種是根本不理解 J2EE ,完全按照 Sun 給的規范去做,造成了濫用分布式、不恰當的使用 Entity Bean 的情況;第三種是跟著流行走,直接使用 Spring 等框架,完全拋棄了 Sun 的規范;第四種是能夠正確看待“正統” J2EE 和輕量級 J2EE ,能根據需要進行方案的比選。第一種是無知,第二、三種是蠻干,第四種人才是 J2EE Expert

    在這一部分,我沒有一一介紹每種組件,因為已經出版了太多的書籍來介紹這些。重要的是我們看問題的角度。

    .Net 概述

    J2EE 是依托一種面向對象語言—— Java 建立的平臺和規范,而 .Net 則是使用多種語言構建的統一的平臺。與 Java 的可移植的思想相近,通過將 .Net 平臺上所有的語言(使用托管方法)轉化成中間語言,然后由 CLR 來解釋執行,相當于 J2EE 平臺下的 JVM .Net 平臺跟 Java 平臺的一個區別是 .Net 平臺沒有把那個規格說明書公開,而是直接由微軟自己拿出了產品,而其需求與 J2EE 是一致的,就是為企業用戶服務,構建企業級信息系統。因此 .Net 平臺也是一個對象中間件產品,也包含消息中間件( Message Queuing ),數據庫訪問中間件( ADO.Net ),遠程過程調用中間件( Remoting ),交易中間件( Enterprise Service )。而 Web Service Microsoft IBM 一起提出的,因此 Microsoft 自然也是很早就開始支持 Web Service 的,而且從 .Net Framework 1.1 時就已經是賣點了。

    Microsoft 自有一套研究方法, Microsoft? 解決方案框架 (MSF) 是一種成熟的、系統的技術項目方法,它基于一套制定好的原理、模型、準則、概念、指南,以及來自 Microsoft 的、經過檢驗的做法。這很像Java陣營常講的J2EE設計模式、敏捷方法之類的東西,而且他們的共同點都是基于實踐經驗。Microsoft把自己在軟件業闖蕩20年的豐富經驗和其他合作者的經驗再加上在模擬真實環境的實驗室的實驗結果整合到自己的產品中,于是就有了Visual Studio .Net系列強大的工具,而且他們是統一的,不是東拼西湊而成的。

    想要更好的構建.Net平臺下的方法與J2EE平臺相同,而很多好的實踐經驗由于已經構建在平臺內部,比如code behind風格使得使用MVC架構模式變得容易。但是與J2EE平臺相同,構建穩固的、可復用的、易于維護的、具有擴展性和延展性的、安全的、面向對象的系統,依然需要設計者對于OO設計思想的準確把握、對于n層結構的深入理解以及對于任務的透徹掌握,使用.Net平臺同樣不意味著你一定能設計出好的應用程序。

    新趨勢

    ???? J2EE .Net 兩大平臺正在齊頭并進,互相借鑒, 2006 Sun 推出了 J2EE 5.0 ,使用了 J2SE 5.0 的新特性——標注 (Annotation) ,引入了 .Net 平臺中的 Metadata 概念,對 EJB 進行了大刀闊斧的改革,去掉了為人詬病的復雜性,就連原來 Rod Johnson 指出的 Entity Bean 只能在 J2EE 容器中測試而造成的困難都被去掉了,現在 Entity Bean 可以像 POJO 一樣被測試了。而 Hibernate 也發布了新版本,開始支持 JTA 。而 Spring 推出了 2.0 版,改進了 Spring MVC 等部分,我們可以看出,隨著 J2EE 社區 Rod Johnson 以及敏捷社區在實踐中發出要簡化 J2EE 開發的復雜度的呼聲, J2EE 開始走向簡單,而這正是 Microsoft 一貫的做法。而 .Net 也將于 2007 年上半年發布 .Net Framework 3.0 ,其中統一了遠程服務( WCF ),工作流( WF ),桌面 UI Web UI API WPF ),安全驗證( WCS )。 Microsoft 繼續向簡化之路邁進,盡可能的讓用戶沒有選擇(有選擇和沒選擇都是雙刃劍),講究一致性。我們可以看出 .Net 在不斷的增強 Web Service ,更好的整合各種應用系統。

    不僅發出感嘆, .Net J2EE 兩大平臺越走越近,隨著時間的推移,或許抉擇只需考慮個人偏好了。因此在當下作出兩大平臺的選擇還有些客觀的辦法,雖然同樣是相當困難的。

    ?

    posted on 2007-02-20 20:19 零雨其蒙 閱讀(825) 評論(0)  編輯  收藏 所屬分類: J2EE


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 91成年人免费视频| 亚洲人成电影在线播放| 亚洲暴爽av人人爽日日碰| 免费在线一级毛片| 日本一区二区免费看| 亚洲中文字幕无码中文字| 亚洲精品无码成人片在线观看 | 亚洲精品无码久久毛片波多野吉衣| 国产1024精品视频专区免费| 色婷婷综合缴情综免费观看| 久久久久亚洲精品无码蜜桃 | 亚洲精品国产成人片| 好吊妞在线新免费视频| 中文字幕版免费电影网站| 亚洲免费观看在线视频| 亚洲人成人网站在线观看| 999国内精品永久免费视频| 国产99久久久久久免费看| 亚洲自偷自偷在线成人网站传媒 | 亚洲人成在线播放网站| 在线播放免费人成视频在线观看| 青青操免费在线观看| 亚洲成av人片在线天堂无| 在线电影你懂的亚洲| 亚洲区小说区图片区| 日韩一级视频免费观看| 国产四虎免费精品视频| 国产在线一区二区综合免费视频| 国产成人人综合亚洲欧美丁香花 | 国产精品免费观看调教网| 国产成人亚洲精品电影| 亚洲AV无码久久久久网站蜜桃 | 国产美女精品久久久久久久免费| 亚洲免费网站在线观看| 免费毛片在线看不用播放器| 美女被免费视频网站a| 亚洲中文字幕无码久久2020| 久久综合亚洲色HEZYO社区| 亚洲国产一成人久久精品| 亚洲人成色77777在线观看大| 国产成人免费手机在线观看视频|