天天看點

初學者如何開發出高品質J2EE系統

J2EE學習者越來越多,J2EE本身技術不斷在發展,湧現出各種概念,本文章試圖從一種容易了解的角度對這些概念向初學者進行解釋,以便掌握學習 J2EE學習方向。

首先我們需要知道Java和J2EE是兩個不同概念,Java不隻是指一種語言,已經代表與微軟不同的另外一個巨大陣營,是以Java有時是指一種 軟體系統的流派,當然目前主要是.NET和Java兩大主流體系。

J2EE可以說指Java在資料庫資訊系統上實作,資料庫資訊系統從早期的dBase、到Delphi/VB等C/S結構,發展到B /S(Browser浏覽器/Server伺服器)結構,而J2EE主要是指B/S結構的實作。

J2EE又是一種架構和标準,架構類似API、庫的概念,但是要超出它們。如果需要詳細了解架構,可先從設計模式開始學習。

J2EE是一個虛的大的概念,J2EE标準主要有三種子技術标準:WEB技術、EJB技術和JMS,談到J2EE應該說最終要落實到這三個子概念 上。

這三種技術的每個技術在應用時都涉及兩個部分:容器部分和應用部分,Web容器也是指Jsp/Servlet容器,你如果要開發一個Web應用,無 論是編譯或運作,都必須要有Jsp/Servlet庫或API支援(除了JDK/J2SE以外)。

Web技術中除了Jsp/Servlet技術外,還需要JavaBeans或Java Class實作一些功能或者包裝攜帶資料,是以Web技術最初裸體簡稱為Jsp/Servlet+JavaBeans系統。

談到JavaBeans技術,就涉及到元件構件技術(component),這是Java的核心基礎部分,很多軟體設計概念(設計模式)都是通過 JavaBeans實作的。

JavaBeans不屬于J2EE概念範疇中,如果一個JavaBeans對象被Web技術(也就是Jsp/Servlet)調用,那麼 JavaBeans就運作在J2EE的Web容器中;如果它被EJB調用,它就運作在EJB容器中。

EJB(企業JavaBeans)是普通JavaBeans的一種提升和規範,因為企業資訊系統開發中需要一個可伸縮的性能和事務、安全機制,這樣 能保證企業系統平滑發展,而不是發展到一種規模重新更換一套軟體系統。

至此,JavaBeans元件發展到EJB後,并不是說以前的那種JavaBeans形式就消失了,這就自然形成了兩種JavaBeans技 術:EJB 和POJO,POJO完全不同于EJB概念,指的是普通JavaBeans,而且這個JavaBeans不依附某種架構,或者幹脆可以說:這個 JavaBeans是你為這個應用程式單獨開發建立的。

J2EE應用系統開發工具有很多:如JBuilder、Eclipse等,這些IDE首先是Java開發工具,也就是說,它們首要基本功能是可以開 發出JavaBeans或Java class,但是如果要開發出J2EE系統,就要落實到要麼是Web技術或EJB技術,那麼就有可能要一些專門子產品功能(如eclipse需要 lomboz插件),最重要的是,因為J2EE系統區分為容器和應用兩個部分,是以,在任何開發工具中開發J2EE都需要指定J2EE容器。

J2EE容器分為WEB容器和EJB容器,Tomcat/Resin是Web容器;JBoss是EJB容器+Web容器等,其中Web容器直接使用 Tomcat實作的。是以你開發的Web應用程式可以在上面兩種容器運作,而你開發的Web+EJB應用則隻可以在JBoss伺服器上運作,商業産品 Websphere/Weblogic等和JBoss屬于同一種性質。

J2EE容器也稱為J2EE伺服器,大部分時它們概念是一緻的。

如果你的J2EE應用系統的資料庫連接配接是通過JNDI獲得,也就是說是從容器中獲得,那麼你的J2EE應用系統基本與資料庫無關,如果你在你的 J2EE 應用系統耦合了資料庫JDBC驅動的配置,那麼你的J2EE應用系統就有資料庫概念色彩,作為一個成熟需要推廣的J2EE應用系統,不推薦和具體資料庫耦 合,當然這其中如何保證J2EE應用系統運作性能又是展現你的設計水準了。

衡量J2EE應用系統設計開發水準高低的标準就是:解耦性;你的應用系統各個功能是否能夠徹底脫離?是否不互相依賴,也隻有這樣,才能展現可維護 性、可拓展性的軟體設計目标。

為了達到這個目的,誕生各種架構概念,J2EE架構标準将一個系統劃分為WEB和EJB主要部分,當然我們有時不是以這個具體技術區分,而是從設計 上抽象為表現層、服務層和持久層,這三個層次從一個高度将J2EE分離開來,實作解耦目的。

是以,我們實際程式設計中,也要将自己的功能向這三個層次上靠,做到大方向清楚,泾渭分明,但是沒有技術上限制限制要做到這點是很不容易的,是以我們還 是必須借助J2EE具體技術來實作,這時,你可以使用EJB規範實作服務層和持久層,Web技術實作表現層;

EJB為什麼能将服務層從Jsp/Servlet手中分離出來,因為它對JavaBeans編碼有強制的限制,現在有一種對JavaBeans弱約 束,使用Ioc模式實作的(當然EJB 3.0也采取這種方式),在Ioc模式誕生前,一般都是通過工廠模式來對JavaBeans限制,形成一個服務層,這也是是Jive這樣開源論壇設計原理 之一。

由此,将服務層從表現層中分離出來目前有兩種可選架構選擇:管理普通JavaBeans(POJO)架構(如Spring、 JdonFramework)以及管理EJB的EJB架構,因為EJB不隻是架構,還是标準,而标準可以擴充發展,是以,這兩種差別将來是可能模糊,被納 入同一個标準了。 但是,個人認為:标準制定是為某個目的服務的,總要犧牲一些換取另外一些,是以,這兩種架構會長時間并存。

這兩種架構分歧也曾經誕生一個新名詞:完全POJO的系統也稱為輕量級系統(lightweight),其實這個名詞本身就沒有一個嚴格定義,更多 是一個吸引人的招牌,輕量是指容易學習容易使用嗎?按照這個定義,其實輕量Spring等系統并不容易學習;而且EJB 3.0(依然叫EJB)以後的系統是否可稱為輕量級了呢?

前面談了服務層架構,使用服務層架構可以将JavaBeans從 Jsp/Servlet中分離出來,而使用表現層架構則可以将Jsp中剩餘的JavaBeans完全分離,這部分JavaBeans主要負責顯示相關,一 般是通過标簽庫(taglib)實作,不同架構有不同自己的标簽庫,Struts是應用比較廣泛的一種表現層架構。

這樣,表現層和服務層的分離是通過兩種架構達到目的,剩餘的就是持久層架構了,通過持久層的架構将資料庫存儲從服務層中分離出來是其目的,持久層框 架有兩種方向:直接自己編寫JDBC等SQL語句(如iBatis);使用O/R Mapping技術實作的Hibernate和JDO技術;當然還有EJB中的實體Bean技術。

持久層架構目前呈現百花齊放,各有優缺點的現狀,是以正如表現層架構一樣,目前沒有一個架構被指定為标準架構,當然,表現層架構現在又出來了一個 JSF,它代表的頁面元件概念是一個新的發展方向,但是複雜的實作讓人有些忘而卻步。

在所有這些J2EE技術中,雖然SUN公司發揮了很大的作用,不過總體來說:網絡上有這樣一個評價:SUN的理論天下無敵;SUN的産品用起來撞 牆;對于初學者,特别是那些試圖通過或已經通過SUN認證的初學者,趕快擺脫SUN的陰影,立即開溜,使用開源領域的産品來實作自己的應用系統。

最後,你的J2EE應用系統如果采取上面提到的表現層、服務層和持久層的架構實作,基本你也可以在無需深刻掌握設計模式的情況下開發出一個高品質的 應用系統了。

還要注意的是: 開發出一個高品質的J2EE系統還需要正确的業務需求了解,那麼域模組化提供了一種比較切實可行的正确了解業務需求的方法,相關詳細知識可從UML角度結合 了解。