首先我們需要知道Java和J2EE是兩個(gè)不同概念,Java不只是指一種語言,已經(jīng)代表與微軟不同的另外一個(gè)巨大陣營,所以Java有時(shí)是指一種軟件系統(tǒng)的流派,當(dāng)然目前主要是.NET和Java兩大主流體系。
J2EE可以說指Java在數(shù)據(jù)庫信息系統(tǒng)上實(shí)現(xiàn),數(shù)據(jù)庫信息系統(tǒng)從早期的dBase、到Delphi/VB等C/S結(jié)構(gòu),發(fā)展到B/S(Browser瀏覽器/Server服務(wù)器)結(jié)構(gòu),而J2EE主要是指B/S結(jié)構(gòu)的實(shí)現(xiàn)。
J2EE又是一種框架和標(biāo)準(zhǔn),框架類似API、庫的概念,但是要超出它們。如果需要詳細(xì)了解框架,可先從設(shè)計(jì)模式開始學(xué)習(xí)。
J2EE是一個(gè)虛的大的概念,J2EE標(biāo)準(zhǔn)主要有三種子技術(shù)標(biāo)準(zhǔn):WEB技術(shù)、EJB技術(shù)和JMS,談到J2EE應(yīng)該說最終要落實(shí)到這三個(gè)子概念上。
這三種技術(shù)的每個(gè)技術(shù)在應(yīng)用時(shí)都涉及兩個(gè)部分:容器部分和應(yīng)用部分,Web容器也是指Jsp/Servlet容器,你如果要開發(fā)一個(gè)Web應(yīng)用,無論是編譯或運(yùn)行,都必須要有Jsp/Servlet庫或API支持(除了JDK/J2SE以外)。
Web技術(shù)中除了Jsp/Servlet技術(shù)外,還需要JavaBeans或Java Class實(shí)現(xiàn)一些功能或者包裝攜帶數(shù)據(jù),所以Web技術(shù)最初裸體簡稱為Jsp/Servlet+JavaBeans系統(tǒng)。
談到JavaBeans技術(shù),就涉及到組件構(gòu)件技術(shù)(component),這是Java的核心基礎(chǔ)部分,很多軟件設(shè)計(jì)概念(設(shè)計(jì)模式)都是通過JavaBeans實(shí)現(xiàn)的。
JavaBeans不屬于J2EE概念范疇中,如果一個(gè)JavaBeans對象被Web技術(shù)(也就是Jsp/Servlet)調(diào)用,那么JavaBeans就運(yùn)行在J2EE的Web容器中;如果它被EJB調(diào)用,它就運(yùn)行在EJB容器中。
EJB(企業(yè)JavaBeans)是普通JavaBeans的一種提升和規(guī)范,因?yàn)槠髽I(yè)信息系統(tǒng)開發(fā)中需要一個(gè)可伸縮的性能和事務(wù)、安全機(jī)制,這樣能保證企業(yè)系統(tǒng)平滑發(fā)展,而不是發(fā)展到一種規(guī)模重新更換一套軟件系統(tǒng)。
至此,JavaBeans組件發(fā)展到EJB后,并不是說以前的那種JavaBeans形式就消失了,這就自然形成了兩種JavaBeans技術(shù):EJB和POJO,POJO完全不同于EJB概念,指的是普通JavaBeans,而且這個(gè)JavaBeans不依附某種框架,或者干脆可以說:這個(gè)JavaBeans是你為這個(gè)應(yīng)用程序單獨(dú)開發(fā)創(chuàng)建的。
J2EE應(yīng)用系統(tǒng)開發(fā)工具有很多:如JBuilder、Eclipse等,這些IDE首先是Java開發(fā)工具,也就是說,它們首要基本功能是可以開發(fā)出JavaBeans或Java class,但是如果要開發(fā)出J2EE系統(tǒng),就要落實(shí)到要么是Web技術(shù)或EJB技術(shù),那么就有可能要一些專門模塊功能(如eclipse需要lomboz插件),最重要的是,因?yàn)镴2EE系統(tǒng)區(qū)分為容器和應(yīng)用兩個(gè)部分,所以,在任何開發(fā)工具中開發(fā)J2EE都需要指定J2EE容器。
J2EE容器分為WEB容器和EJB容器,Tomcat/Resin是Web容器;JBoss是EJB容器+Web容器等,其中Web容器直接使用Tomcat實(shí)現(xiàn)的。所以你開發(fā)的Web應(yīng)用程序可以在上面兩種容器運(yùn)行,而你開發(fā)的Web+EJB應(yīng)用則只可以在JBoss服務(wù)器上運(yùn)行,商業(yè)產(chǎn)品Websphere/Weblogic等和JBoss屬于同一種性質(zhì)。
J2EE容器也稱為J2EE服務(wù)器,大部分時(shí)它們概念是一致的。
如果你的J2EE應(yīng)用系統(tǒng)的數(shù)據(jù)庫連接是通過JNDI獲得,也就是說是從容器中獲得,那么你的J2EE應(yīng)用系統(tǒng)基本與數(shù)據(jù)庫無關(guān),如果你在你的J2EE應(yīng)用系統(tǒng)耦合了數(shù)據(jù)庫JDBC驅(qū)動(dòng)的配置,那么你的J2EE應(yīng)用系統(tǒng)就有數(shù)據(jù)庫概念色彩,作為一個(gè)成熟需要推廣的J2EE應(yīng)用系統(tǒng),不推薦和具體數(shù)據(jù)庫耦合,當(dāng)然這其中如何保證J2EE應(yīng)用系統(tǒng)運(yùn)行性能又是體現(xiàn)你的設(shè)計(jì)水平了。
衡量J2EE應(yīng)用系統(tǒng)設(shè)計(jì)開發(fā)水平高低的標(biāo)準(zhǔn)就是:解耦性;你的應(yīng)用系統(tǒng)各個(gè)功能是否能夠徹底脫離?是否不相互依賴,也只有這樣,才能體現(xiàn)可維護(hù)性、可拓展性的軟件設(shè)計(jì)目標(biāo)。
為了達(dá)到這個(gè)目的,誕生各種框架概念,J2EE框架標(biāo)準(zhǔn)將一個(gè)系統(tǒng)劃分為WEB和EJB主要部分,當(dāng)然我們有時(shí)不是以這個(gè)具體技術(shù)區(qū)分,而是從設(shè)計(jì)上抽象為表現(xiàn)層、服務(wù)層和持久層,這三個(gè)層次從一個(gè)高度將J2EE分離開來,實(shí)現(xiàn)解耦目的。
因此,我們實(shí)際編程中,也要將自己的功能向這三個(gè)層次上靠,做到大方向清楚,涇渭分明,但是沒有技術(shù)上約束限制要做到這點(diǎn)是很不容易的,因此我們還是必須借助J2EE具體技術(shù)來實(shí)現(xiàn),這時(shí),你可以使用EJB規(guī)范實(shí)現(xiàn)服務(wù)層和持久層,Web技術(shù)實(shí)現(xiàn)表現(xiàn)層;
EJB為什么能將服務(wù)層從Jsp/Servlet手中分離出來,因?yàn)樗鼘avaBeans編碼有強(qiáng)制的約束,現(xiàn)在有一種對JavaBeans弱約束,使用Ioc模式實(shí)現(xiàn)的(當(dāng)然EJB 3.0也采取這種方式),在Ioc模式誕生前,一般都是通過工廠模式來對JavaBeans約束,形成一個(gè)服務(wù)層,這也是是Jive這樣開源論壇設(shè)計(jì)原理之一。
由此,將服務(wù)層從表現(xiàn)層中分離出來目前有兩種可選架構(gòu)選擇:管理普通JavaBeans(POJO)框架(如Spring、JdonFramework)以及管理EJB的EJB框架,因?yàn)镋JB不只是框架,還是標(biāo)準(zhǔn),而標(biāo)準(zhǔn)可以擴(kuò)展發(fā)展,所以,這兩種區(qū)別將來是可能模糊,被納入同一個(gè)標(biāo)準(zhǔn)了?!〉牵瑐€(gè)人認(rèn)為:標(biāo)準(zhǔn)制定是為某個(gè)目的服務(wù)的,總要犧牲一些換取另外一些,所以,這兩種架構(gòu)會(huì)長時(shí)間并存。
這兩種架構(gòu)分歧也曾經(jīng)誕生一個(gè)新名詞:完全POJO的系統(tǒng)也稱為輕量級(jí)系統(tǒng)(lightweight),其實(shí)這個(gè)名詞本身就沒有一個(gè)嚴(yán)格定義,更多是一個(gè)吸引人的招牌,輕量是指容易學(xué)習(xí)容易使用嗎?按照這個(gè)定義,其實(shí)輕量Spring等系統(tǒng)并不容易學(xué)習(xí);而且EJB 3.0(依然叫EJB)以后的系統(tǒng)是否可稱為輕量級(jí)了呢?
前面談了服務(wù)層框架,使用服務(wù)層框架可以將JavaBeans從Jsp/Servlet中分離出來,而使用表現(xiàn)層框架則可以將Jsp中剩余的JavaBeans完全分離,這部分JavaBeans主要負(fù)責(zé)顯示相關(guān),一般是通過標(biāo)簽庫(taglib)實(shí)現(xiàn),不同框架有不同自己的標(biāo)簽庫,Struts是應(yīng)用比較廣泛的一種表現(xiàn)層框架。
這樣,表現(xiàn)層和服務(wù)層的分離是通過兩種框架達(dá)到目的,剩余的就是持久層框架了,通過持久層的框架將數(shù)據(jù)庫存儲(chǔ)從服務(wù)層中分離出來是其目的,持久層框架有兩種方向:直接自己編寫JDBC等SQL語句(如iBatis);使用O/R Mapping技術(shù)實(shí)現(xiàn)的Hibernate和JDO技術(shù);當(dāng)然還有EJB中的實(shí)體Bean技術(shù)。
持久層框架目前呈現(xiàn)百花齊放,各有優(yōu)缺點(diǎn)的現(xiàn)狀,所以正如表現(xiàn)層框架一樣,目前沒有一個(gè)框架被指定為標(biāo)準(zhǔn)框架,當(dāng)然,表現(xiàn)層框架現(xiàn)在又出來了一個(gè)JSF,它代表的頁面組件概念是一個(gè)新的發(fā)展方向,但是復(fù)雜的實(shí)現(xiàn)讓人有些忘而卻步。
在所有這些J2EE技術(shù)中,雖然SUN公司發(fā)揮了很大的作用,不過總體來說:網(wǎng)絡(luò)上有這樣一個(gè)評(píng)價(jià):SUN的理論天下無敵;SUN的產(chǎn)品用起來撞墻;對于初學(xué)者,特別是那些試圖通過或已經(jīng)通過SUN認(rèn)證的初學(xué)者,趕快擺脫SUN的陰影,立即開溜,使用開源領(lǐng)域的產(chǎn)品來實(shí)現(xiàn)自己的應(yīng)用系統(tǒng)。
*,你的J2EE應(yīng)用系統(tǒng)如果采取上面提到的表現(xiàn)層、服務(wù)層和持久層的框架實(shí)現(xiàn),基本你也可以在無需深刻掌握設(shè)計(jì)模式的情況下開發(fā)出一個(gè)高質(zhì)量的應(yīng)用系統(tǒng)了。
還要注意的是: 開發(fā)出一個(gè)高質(zhì)量的J2EE系統(tǒng)還需要正確的業(yè)務(wù)需求理解,那么域建模提供了一種比較切實(shí)可行的正確理解業(yè)務(wù)需求的方法,相關(guān)詳細(xì)知識(shí)可從UML角度結(jié)合理解。
當(dāng)然,如果你想設(shè)計(jì)自己的行業(yè)框架,那么*步從設(shè)計(jì)模式開始吧,因?yàn)樵O(shè)計(jì)模式提供你一個(gè)實(shí)現(xiàn)JavaBeans或類之間解耦參考實(shí)現(xiàn)方法,當(dāng)你學(xué)會(huì)了系統(tǒng)基本單元JavaBean或類之間解耦時(shí),那么系統(tǒng)模塊之間的解耦你就可能掌握,進(jìn)而你就可以實(shí)現(xiàn)行業(yè)框架的提煉了,這又是另外一個(gè)發(fā)展方向了。
以上理念可以總結(jié)為一句話:
J2EE開發(fā)三件寶: Domain Model(域建模)、patterns(模式)和framework(框架)。
推薦一套高質(zhì)量的J2EE開源系統(tǒng): JPestore
關(guān)注牛耳教育 J2EE學(xué)習(xí)者越來越多,J2EE本身技術(shù)不斷在發(fā)展,涌現(xiàn)出各種概念,本文章試圖從一種容易理解的角度對這些概念向初學(xué)者進(jìn)行解釋,以便掌握學(xué)習(xí)J2EE學(xué)習(xí)方向。
首先我們需要知道Java和J2EE是兩個(gè)不同概念,Java不只是指一種語言,已經(jīng)代表與微軟不同的另外一個(gè)巨大陣營,所以Java有時(shí)是指一種軟件系統(tǒng)的流派,當(dāng)然目前主要是.NET和Java兩大主流體系。
J2EE可以說指Java在數(shù)據(jù)庫信息系統(tǒng)上實(shí)現(xiàn),數(shù)據(jù)庫信息系統(tǒng)從早期的dBase、到Delphi/VB等C/S結(jié)構(gòu),發(fā)展到B/S(Browser瀏覽器/Server服務(wù)器)結(jié)構(gòu),而J2EE主要是指B/S結(jié)構(gòu)的實(shí)現(xiàn)。
J2EE又是一種框架和標(biāo)準(zhǔn),框架類似API、庫的概念,但是要超出它們。如果需要詳細(xì)了解框架,可先從設(shè)計(jì)模式開始學(xué)習(xí)。
J2EE是一個(gè)虛的大的概念,J2EE標(biāo)準(zhǔn)主要有三種子技術(shù)標(biāo)準(zhǔn):WEB技術(shù)、EJB技術(shù)和JMS,談到J2EE應(yīng)該說最終要落實(shí)到這三個(gè)子概念上。
這三種技術(shù)的每個(gè)技術(shù)在應(yīng)用時(shí)都涉及兩個(gè)部分:容器部分和應(yīng)用部分,Web容器也是指Jsp/Servlet容器,你如果要開發(fā)一個(gè)Web應(yīng)用,無論是編譯或運(yùn)行,都必須要有Jsp/Servlet庫或API支持(除了JDK/J2SE以外)。
Web技術(shù)中除了Jsp/Servlet技術(shù)外,還需要JavaBeans或Java Class實(shí)現(xiàn)一些功能或者包裝攜帶數(shù)據(jù),所以Web技術(shù)最初裸體簡稱為Jsp/Servlet+JavaBeans系統(tǒng)。
談到JavaBeans技術(shù),就涉及到組件構(gòu)件技術(shù)(component),這是Java的核心基礎(chǔ)部分,很多軟件設(shè)計(jì)概念(設(shè)計(jì)模式)都是通過JavaBeans實(shí)現(xiàn)的。
JavaBeans不屬于J2EE概念范疇中,如果一個(gè)JavaBeans對象被Web技術(shù)(也就是Jsp/Servlet)調(diào)用,那么JavaBeans就運(yùn)行在J2EE的Web容器中;如果它被EJB調(diào)用,它就運(yùn)行在EJB容器中。
EJB(企業(yè)JavaBeans)是普通JavaBeans的一種提升和規(guī)范,因?yàn)槠髽I(yè)信息系統(tǒng)開發(fā)中需要一個(gè)可伸縮的性能和事務(wù)、安全機(jī)制,這樣能保證企業(yè)系統(tǒng)平滑發(fā)展,而不是發(fā)展到一種規(guī)模重新更換一套軟件系統(tǒng)。
至此,JavaBeans組件發(fā)展到EJB后,并不是說以前的那種JavaBeans形式就消失了,這就自然形成了兩種JavaBeans技術(shù):EJB和POJO,POJO完全不同于EJB概念,指的是普通JavaBeans,而且這個(gè)JavaBeans不依附某種框架,或者干脆可以說:這個(gè)JavaBeans是你為這個(gè)應(yīng)用程序單獨(dú)開發(fā)創(chuàng)建的。
J2EE應(yīng)用系統(tǒng)開發(fā)工具有很多:如JBuilder、Eclipse等,這些IDE首先是Java開發(fā)工具,也就是說,它們首要基本功能是可以開發(fā)出JavaBeans或Java class,但是如果要開發(fā)出J2EE系統(tǒng),就要落實(shí)到要么是Web技術(shù)或EJB技術(shù),那么就有可能要一些專門模塊功能(如eclipse需要lomboz插件),最重要的是,因?yàn)镴2EE系統(tǒng)區(qū)分為容器和應(yīng)用兩個(gè)部分,所以,在任何開發(fā)工具中開發(fā)J2EE都需要指定J2EE容器。
J2EE容器分為WEB容器和EJB容器,Tomcat/Resin是Web容器;JBoss是EJB容器+Web容器等,其中Web容器直接使用Tomcat實(shí)現(xiàn)的。所以你開發(fā)的Web應(yīng)用程序可以在上面兩種容器運(yùn)行,而你開發(fā)的Web+EJB應(yīng)用則只可以在JBoss服務(wù)器上運(yùn)行,商業(yè)產(chǎn)品Websphere/Weblogic等和JBoss屬于同一種性質(zhì)。
J2EE容器也稱為J2EE服務(wù)器,大部分時(shí)它們概念是一致的。
如果你的J2EE應(yīng)用系統(tǒng)的數(shù)據(jù)庫連接是通過JNDI獲得,也就是說是從容器中獲得,那么你的J2EE應(yīng)用系統(tǒng)基本與數(shù)據(jù)庫無關(guān),如果你在你的J2EE應(yīng)用系統(tǒng)耦合了數(shù)據(jù)庫JDBC驅(qū)動(dòng)的配置,那么你的J2EE應(yīng)用系統(tǒng)就有數(shù)據(jù)庫概念色彩,作為一個(gè)成熟需要推廣的J2EE應(yīng)用系統(tǒng),不推薦和具體數(shù)據(jù)庫耦合,當(dāng)然這其中如何保證J2EE應(yīng)用系統(tǒng)運(yùn)行性能又是體現(xiàn)你的設(shè)計(jì)水平了。
衡量J2EE應(yīng)用系統(tǒng)設(shè)計(jì)開發(fā)水平高低的標(biāo)準(zhǔn)就是:解耦性;你的應(yīng)用系統(tǒng)各個(gè)功能是否能夠徹底脫離?是否不相互依賴,也只有這樣,才能體現(xiàn)可維護(hù)性、可拓展性的軟件設(shè)計(jì)目標(biāo)。
為了達(dá)到這個(gè)目的,誕生各種框架概念,J2EE框架標(biāo)準(zhǔn)將一個(gè)系統(tǒng)劃分為WEB和EJB主要部分,當(dāng)然我們有時(shí)不是以這個(gè)具體技術(shù)區(qū)分,而是從設(shè)計(jì)上抽象為表現(xiàn)層、服務(wù)層和持久層,這三個(gè)層次從一個(gè)高度將J2EE分離開來,實(shí)現(xiàn)解耦目的。
因此,我們實(shí)際編程中,也要將自己的功能向這三個(gè)層次上靠,做到大方向清楚,涇渭分明,但是沒有技術(shù)上約束限制要做到這點(diǎn)是很不容易的,因此我們還是必須借助J2EE具體技術(shù)來實(shí)現(xiàn),這時(shí),你可以使用EJB規(guī)范實(shí)現(xiàn)服務(wù)層和持久層,Web技術(shù)實(shí)現(xiàn)表現(xiàn)層;
EJB為什么能將服務(wù)層從Jsp/Servlet手中分離出來,因?yàn)樗鼘avaBeans編碼有強(qiáng)制的約束,現(xiàn)在有一種對JavaBeans弱約束,使用Ioc模式實(shí)現(xiàn)的(當(dāng)然EJB 3.0也采取這種方式),在Ioc模式誕生前,一般都是通過工廠模式來對JavaBeans約束,形成一個(gè)服務(wù)層,這也是是Jive這樣開源論壇設(shè)計(jì)原理之一。
由此,將服務(wù)層從表現(xiàn)層中分離出來目前有兩種可選架構(gòu)選擇:管理普通JavaBeans(POJO)框架(如Spring、JdonFramework)以及管理EJB的EJB框架,因?yàn)镋JB不只是框架,還是標(biāo)準(zhǔn),而標(biāo)準(zhǔn)可以擴(kuò)展發(fā)展,所以,這兩種區(qū)別將來是可能模糊,被納入同一個(gè)標(biāo)準(zhǔn)了。 但是,個(gè)人認(rèn)為:標(biāo)準(zhǔn)制定是為某個(gè)目的服務(wù)的,總要犧牲一些換取另外一些,所以,這兩種架構(gòu)會(huì)長時(shí)間并存。
這兩種架構(gòu)分歧也曾經(jīng)誕生一個(gè)新名詞:完全POJO的系統(tǒng)也稱為輕量級(jí)系統(tǒng)(lightweight),其實(shí)這個(gè)名詞本身就沒有一個(gè)嚴(yán)格定義,更多是一個(gè)吸引人的招牌,輕量是指容易學(xué)習(xí)容易使用嗎?按照這個(gè)定義,其實(shí)輕量Spring等系統(tǒng)并不容易學(xué)習(xí);而且EJB 3.0(依然叫EJB)以后的系統(tǒng)是否可稱為輕量級(jí)了呢?
前面談了服務(wù)層框架,使用服務(wù)層框架可以將JavaBeans從Jsp/Servlet中分離出來,而使用表現(xiàn)層框架則可以將Jsp中剩余的JavaBeans完全分離,這部分JavaBeans主要負(fù)責(zé)顯示相關(guān),一般是通過標(biāo)簽庫(taglib)實(shí)現(xiàn),不同框架有不同自己的標(biāo)簽庫,Struts是應(yīng)用比較廣泛的一種表現(xiàn)層框架。
這樣,表現(xiàn)層和服務(wù)層的分離是通過兩種框架達(dá)到目的,剩余的就是持久層框架了,通過持久層的框架將數(shù)據(jù)庫存儲(chǔ)從服務(wù)層中分離出來是其目的,持久層框架有兩種方向:直接自己編寫JDBC等SQL語句(如iBatis);使用O/R Mapping技術(shù)實(shí)現(xiàn)的Hibernate和JDO技術(shù);當(dāng)然還有EJB中的實(shí)體Bean技術(shù)。
持久層框架目前呈現(xiàn)百花齊放,各有優(yōu)缺點(diǎn)的現(xiàn)狀,所以正如表現(xiàn)層框架一樣,目前沒有一個(gè)框架被指定為標(biāo)準(zhǔn)框架,當(dāng)然,表現(xiàn)層框架現(xiàn)在又出來了一個(gè)JSF,它代表的頁面組件概念是一個(gè)新的發(fā)展方向,但是復(fù)雜的實(shí)現(xiàn)讓人有些忘而卻步。
在所有這些J2EE技術(shù)中,雖然SUN公司發(fā)揮了很大的作用,不過總體來說:網(wǎng)絡(luò)上有這樣一個(gè)評(píng)價(jià):SUN的理論天下無敵;SUN的產(chǎn)品用起來撞墻;對于初學(xué)者,特別是那些試圖通過或已經(jīng)通過SUN認(rèn)證的初學(xué)者,趕快擺脫SUN的陰影,立即開溜,使用開源領(lǐng)域的產(chǎn)品來實(shí)現(xiàn)自己的應(yīng)用系統(tǒng)。
*,你的J2EE應(yīng)用系統(tǒng)如果采取上面提到的表現(xiàn)層、服務(wù)層和持久層的框架實(shí)現(xiàn),基本你也可以在無需深刻掌握設(shè)計(jì)模式的情況下開發(fā)出一個(gè)高質(zhì)量的應(yīng)用系統(tǒng)了。
還要注意的是: 開發(fā)出一個(gè)高質(zhì)量的J2EE系統(tǒng)還需要正確的業(yè)務(wù)需求理解,那么域建模提供了一種比較切實(shí)可行的正確理解業(yè)務(wù)需求的方法,相關(guān)詳細(xì)知識(shí)可從UML角度結(jié)合理解。
當(dāng)然,如果你想設(shè)計(jì)自己的行業(yè)框架,那么*步從設(shè)計(jì)模式開始吧,因?yàn)樵O(shè)計(jì)模式提供你一個(gè)實(shí)現(xiàn)JavaBeans或類之間解耦參考實(shí)現(xiàn)方法,當(dāng)你學(xué)會(huì)了系統(tǒng)基本單元JavaBean或類之間解耦時(shí),那么系統(tǒng)模塊之間的解耦你就可能掌握,進(jìn)而你就可以實(shí)現(xiàn)行業(yè)框架的提煉了,這又是另外一個(gè)發(fā)展方向了。
以上理念可以總結(jié)為一句話:
J2EE開發(fā)三件寶: Domain Model(域建模)、patterns(模式)和framework(框架)。
推薦一套高質(zhì)量的J2EE開源系統(tǒng): JPestore