J2EE學(xué)習(xí)者越來越多,J2EE本身技術(shù)不斷在發(fā)展,涌現(xiàn)出各種概念,本文章試圖從一種容易理解的角度對(duì)這些概念向初學(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ù)最初裸體簡(jiǎn)稱為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對(duì)象被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)樗鼘?duì)JavaBeans編碼有強(qiáng)制的約束,現(xiàn)在有一種對(duì)JavaBeans弱約束,使用Ioc模式實(shí)現(xiàn)的(當(dāng)然EJB 3.0也采取這種方式),在Ioc模式誕生前,一般都是通過工廠模式來對(duì)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ì)長(zhǎng)時(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)品用起來撞墻;對(duì)于初學(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é)為一句話:Java學(xué)習(xí)開發(fā)三件寶: Domain Model(域建模)、Patterns(模式)和Framework(框架)。集三寶理念于一身,小中型J2EE項(xiàng)目快速開發(fā)工具:Jdon Framework
----------------------------------------------------------------------------------------------------
JoannaYe ask:
你好 Banq先生 關(guān)注你的文章很長(zhǎng)一段時(shí)間了, 對(duì)你在Java領(lǐng)域的技術(shù)水平,以及在很多問題上的看法, 也非常佩服. 國內(nèi)目前達(dá)到你的水平的人真是很少(當(dāng)然高人也許都隱居起來了). 但是, 有幾個(gè)問題想與你討論:
首先,軟件是一個(gè)絕對(duì)的應(yīng)用技術(shù),任何技術(shù)離開了具體的應(yīng)用, 坦率地說是毫無價(jià)值的.我看,Jdon也有在這方面的嘗試,如網(wǎng)站,網(wǎng)上商店生成系統(tǒng)等.但這與真正的企業(yè)應(yīng)用還有非常大的距離. 我不了解,你在這一領(lǐng)域里為什么沒有涉足,是因?yàn)槟阏J(rèn)為很困難,基本上是以我們國內(nèi)目前的技術(shù)水平無法到達(dá)呢, 還是因?yàn)槟悴恍加谶@方面的深入, 認(rèn)為你所追求的是純粹超然的技術(shù)概念呢.
我的其他問題有賴于了解你關(guān)于這個(gè)問題的回答,讓我們繼續(xù)關(guān)注和討論.
banq answer:
?
>但這與真正的企業(yè)應(yīng)用還有非常大的距離. 我不了解,你在這一領(lǐng)域里為什么沒有涉足,是因?yàn)槟阏J(rèn)為很困難,基本上是以我們國內(nèi)目前的技術(shù)
多謝探討,這個(gè)問題很復(fù)雜,大概有下列幾點(diǎn):
1. 現(xiàn)在軟件技術(shù)不再象以前的技術(shù),以前的技術(shù)可以說只有做個(gè)這個(gè)行業(yè)大型軟件系統(tǒng)的經(jīng)驗(yàn)的人才可以說對(duì)這些軟件技術(shù)有掌握,而現(xiàn)在的技術(shù)則不必了,J2EE講究架構(gòu),J2EE它是一套應(yīng)用軟件的規(guī)范,也就是說,J2EE是很多做過大型軟件的人進(jìn)行匯總后的經(jīng)驗(yàn)精華,一個(gè)大型系統(tǒng)需要哪些技術(shù)部分、什么時(shí)候適合什么技術(shù),在J2EE標(biāo)準(zhǔn)中基本都有涉及,例如EJB技術(shù)、JMS等。
這樣,如果你能完全掌握和駕馭這些J2EE架構(gòu)技術(shù),你有時(shí)確實(shí)不必一定要做個(gè)大型軟件經(jīng)驗(yàn)才型,這稱為站在巨人的肩膀上。
但是反過來,如果你沒有豐富的軟件系統(tǒng)實(shí)戰(zhàn)經(jīng)驗(yàn),你去理解EJB/JMS等就很困難,所以這兩個(gè)技術(shù)對(duì)初學(xué)者比較難的原因之一。
2. UML結(jié)合J2EE這樣OO一套實(shí)施過程從方法論以及模式角度固化了軟件數(shù)據(jù)庫系統(tǒng)的分析 設(shè)計(jì)開發(fā),這也是因?yàn)橛蠱DA(將這些過程用軟件自動(dòng)生成代碼)誕生的原因。雖然這些簡(jiǎn)化了我們開發(fā)系統(tǒng)的過程,但是這只是解決了應(yīng)用系統(tǒng)的一部分問題,工作流等尚未成熟,使用這樣方式開發(fā)系統(tǒng),依據(jù)我的經(jīng)驗(yàn),最后會(huì)將煩瑣和細(xì)致的工作壓在Jsp頁面上,目前開發(fā)一個(gè)系統(tǒng),結(jié)合標(biāo)簽庫和用戶界面需求這個(gè)工作反而花費(fèi)我更多時(shí)間,希望JSF在這方面能有效率提升,等這些技術(shù)細(xì)節(jié)都能解決,基本J2EE非常成熟了。
3.目前我通過咨詢角色和一些軟件公司一起承接一些企業(yè)應(yīng)用項(xiàng)目,例如去年承接一個(gè)大型外資人事系統(tǒng),他們要求管理GE 等幾家外資企業(yè)的人事福利(這些企業(yè)外包人事給他們),如果專為一家公司開發(fā)人事很簡(jiǎn)單,但是要求這個(gè)人事適合多家,那么重用性要求很高,設(shè)計(jì)抽象面很高,他們?cè)谛录悠掠蓄愃葡到y(tǒng),但技術(shù)很老,我聽過新加坡的系統(tǒng),他們也有一些經(jīng)驗(yàn)總結(jié),大部分和我的J2EE設(shè)計(jì)相吻合,我和新加坡的人交流過想法,他們很驚奇,不太相信,加上費(fèi)用問題,只進(jìn)行了初步架構(gòu)設(shè)計(jì)就擱淺了。
4.不要小看網(wǎng)站系統(tǒng),以前網(wǎng)站系統(tǒng)都是用PHP Perl做,功能很弱,無法和企業(yè)系統(tǒng)相比,但是隨著Inernet普及,更多人要求聯(lián)網(wǎng),例如如果一家公司的ERP通過互聯(lián)網(wǎng)實(shí)現(xiàn),那么老總出差就很方便,但是現(xiàn)在為一家公司開發(fā)一個(gè)基于internet的ERP很貴,比傳統(tǒng)的貴,這不合理,這也是SOA提出的目的之一,以后ERP實(shí)現(xiàn)網(wǎng)上租用,就象你申請(qǐng)一個(gè)Blog或論壇或Email,你可以為你的企業(yè)申請(qǐng)一個(gè)ERP系統(tǒng),這樣只要企業(yè)付租費(fèi)就可以了,這可理想目前已經(jīng)接近,前段時(shí)間美國一家提供這種服務(wù)的企業(yè)來上海做宣傳,他們的業(yè)績(jī)?cè)鲩L(zhǎng)速度極其快 500%.
通過網(wǎng)站提供ERP等企業(yè)服務(wù)對(duì)于軟件設(shè)計(jì)的重用性要求很高,就一套郵箱系統(tǒng)可以服務(wù)很多用戶一樣,你必須設(shè)計(jì)出一套重要性、靈活性很高的ERP系統(tǒng)適合不同的用戶,可見網(wǎng)站軟件的水平是極其高的。前面我做的網(wǎng)站自動(dòng)生成系統(tǒng)到現(xiàn)在我都認(rèn)為完成不夠好,現(xiàn)在很多網(wǎng)站都提供這種服務(wù),這象Blog,但是Blog等只限制你網(wǎng)站模板,而不是自由定制頁面,所以Blog這些都是小孩玩家家,根本無發(fā)走向商業(yè),著名的那個(gè)方興東鼓吹Blog,其實(shí)沒有技術(shù)革新,靠你媒體吹呼就是革命了。
?
JoannaYe ask:
謝謝 Banq 先生在6月23日非常認(rèn)真的回復(fù)(抱歉由于忙,沒能馬上回復(fù)). 總結(jié)起來, 如果我的理解不錯(cuò)的話, 你的結(jié)論是 1)你認(rèn)為網(wǎng)站系統(tǒng)并不可小覷(同意,一個(gè)高訪問量,同時(shí)能夠?qū)崿F(xiàn)網(wǎng)上交易的網(wǎng)站的確如此).2)EJB/JMS技術(shù)對(duì)于初學(xué)者來說是不容易,但是對(duì)你來說,你是可以Handdle的. 3)你也有承接企業(yè)系統(tǒng)的實(shí)際經(jīng)驗(yàn),象你說的那個(gè)HR系統(tǒng). 但不知您以咨詢身份參加的這個(gè)HR系統(tǒng)到底都解決的是實(shí)際管理中的什么樣的問題?在性能方面都達(dá)到了什么樣的水平? 具體來說,采用了哪些技術(shù)(諸如您帖中提到的一些技術(shù))應(yīng)對(duì)了實(shí)際中具體的什么樣的問題. 此外以你在這個(gè)HR系統(tǒng)的經(jīng)驗(yàn)來看, 是一個(gè)多少人的Team,采取什么樣的開發(fā)方式和開發(fā)進(jìn)度(人員和時(shí)間的分配比例)開發(fā)的.你認(rèn)為在這樣的一個(gè)項(xiàng)目的開發(fā)過程中最關(guān)鍵的是什么?最影響 Prductivity的又是什么?
對(duì)這樣一些問題看上去似乎很空泛,但是實(shí)際上能夠真正反映出我一開始提出的issue,"軟件是一個(gè)絕對(duì)的應(yīng)用技術(shù),任何技術(shù)離開了具體的應(yīng)用, 坦率地說是毫無價(jià)值的".舉個(gè)例子來說,書本上,名家們會(huì)告訴你, Value List Handler 這個(gè)設(shè)計(jì)模式是解決這樣的問題:"You have a remote client that wants to iterate over a large results list." 一般來說,如果是一個(gè)大量地查找某一些"topic/dimension"下的數(shù)據(jù),這樣的問題,我們也毫無疑問地確定要用到這個(gè)模式.但是,如果對(duì)一條具體的數(shù)據(jù),如某一個(gè)銷售員,要和他的客戶討論(在線談判)他們之間的一個(gè)具體合同,這時(shí)候會(huì)不會(huì)也需要用到這個(gè)模式.如果要用這個(gè)模式,到底是用Stateful Session Bean 還是用 Stateless Session Bean 實(shí)現(xiàn)呢,他們各自在實(shí)現(xiàn)方法上對(duì)性能的影響是什么, 當(dāng)你決定采用了某種實(shí)現(xiàn)方法,你到底是怎樣Tradeoff的呢; 最后對(duì)這個(gè)設(shè)計(jì)模式來說,在最終的設(shè)計(jì)方案中如何把它抽象到對(duì)一個(gè)通用的,普遍的業(yè)務(wù)問題,而不是僅僅對(duì)"某一個(gè)銷售員,要和他的客戶討論他們之間的一個(gè)具體合同"這樣的一個(gè)特例問題,作出一個(gè)通用的解決方案,適應(yīng)任意規(guī)模,任意業(yè)務(wù)的企業(yè),真正達(dá)到軟件工程的目標(biāo):高度的Reusing 和 Scalablity. 實(shí)際的企業(yè)應(yīng)用系統(tǒng)就是充滿著類似這樣的問題,很有挑戰(zhàn).但有些技術(shù)人員就僅僅滿足于自己可以用某項(xiàng)技術(shù)做出一些小的Demo了,就不愿意,或根本不屑于深入下去面對(duì)一個(gè)實(shí)際的應(yīng)用問題.
因此, 我相信您應(yīng)該能夠非常理解,我為什么感興趣了解您對(duì)我上面提出問題答案.
您的很多看法都很不錯(cuò), 我非常同意, 希望我們能在今后進(jìn)一步深入地探討. 謝謝!
banq answer:
>你認(rèn)為在這樣的一個(gè)項(xiàng)目的開發(fā)過程中最關(guān)鍵的是什么?最影響 Prductivity的又是什么?
當(dāng)這樣的項(xiàng)目使用框架組件組合后,由于系統(tǒng)重要 重用的功能已經(jīng)封裝在框架軟件中,所以,只要能夠組裝出應(yīng)用系統(tǒng),一般第一次測(cè)試就會(huì)立即通過,我已經(jīng)不止一次體會(huì)這種快感,我現(xiàn)在基本告別以前那種花費(fèi)大量時(shí)間在Java調(diào)試上時(shí)代,我相信很多初學(xué)者還在這個(gè)泥潭里掙扎,這就成為影響一個(gè)產(chǎn)品的主要原因,現(xiàn)在使用jdon框架開發(fā),幾乎消滅這個(gè)因素。
那么,現(xiàn)在最影響 Prductivity的是什么?就是技術(shù)外的因素:項(xiàng)目管理。
關(guān)于你提的性能方面設(shè)計(jì)達(dá)到什么水平等,這些我已經(jīng)整合進(jìn)入Jdon框架,使用Jdon框架開發(fā),幾乎無需考慮性能設(shè)計(jì),一開始就具有優(yōu)越的性能,這些都是有測(cè)試數(shù)據(jù),Java產(chǎn)品的好處就是一切可以自己動(dòng)手,不必聽從第三方評(píng)價(jià),因?yàn)槟切┒加惺Ч?,服?wù)器配置上Jprofile/Optimizeit,客戶端配置Jmeter,啟動(dòng)幾個(gè)線程一跑,Jdon框架和應(yīng)用程序的性能真相就出來了,所以,在Java領(lǐng)域,開源和商業(yè)產(chǎn)品是在同一起跑線,面對(duì)不同的用戶:前者是更有頭腦,自己動(dòng)手;后者是對(duì)自己缺乏自信的人;服務(wù)是兩者的重點(diǎn)。
>在最終的設(shè)計(jì)方案中如何把它抽象到對(duì)一個(gè)通用的,普遍的業(yè)務(wù)問題,而不>是僅僅對(duì)"某一個(gè)銷售員,要和他的客戶討論他們之間的一個(gè)具體合同"這>樣的一個(gè)特例問題
其實(shí)你說的行業(yè)框架提煉的問題,這和業(yè)務(wù)相關(guān),Jdon框架等都是基礎(chǔ)框架,沒有這些組件框架的優(yōu)雅解決方式,就沒有行業(yè)框架的好的開始,我想你不希望在行業(yè)框架提煉之后,發(fā)現(xiàn)無法加入一些縱向功能,就象數(shù)據(jù)庫設(shè)計(jì)好之后,幾年以后卻成為你發(fā)展的障礙。
行業(yè)框架需要資深的行業(yè)背景,這也不是一般人做的,但是工作流/Portal等都是行業(yè)框架的提煉,這些也是我們以后發(fā)展的方向。
就我個(gè)人來說,我愿意解決重要問題,然后我告訴更多人解決方向,如果他們相信,大家一起努力來解決所有問題,而不是靠我一個(gè)人解決所有問題。
JoannaYe ask:
謝謝Banq先生的回復(fù), 你的很多觀點(diǎn)都很好,我非常同意.象你所說最影響Prductivity的是技術(shù)外的因素:項(xiàng)目管理. 但我不知你能不能有一些具體的看法.因?yàn)槿魏涡袠I(yè),最終的問題, 競(jìng)爭(zhēng)力的問題都是如何通過管理來提高Prductivity. 不知你對(duì)軟件這一行業(yè)有沒有特別的見解.
開源項(xiàng)目的確有它的優(yōu)勢(shì),特別是作這些開源項(xiàng)目的人,往往是一些技術(shù)的精英.但是, 我還是以為應(yīng)該以成熟的Commercial產(chǎn)品作為自己開發(fā)的基礎(chǔ),即所謂"巨人的肩膀". 這是因?yàn)? 成功的Commercial產(chǎn)品往往更注重最終用戶, 這是這些產(chǎn)品能夠給它的公司帶來巨大的商業(yè)利潤的源泉.純技術(shù)的專家往往會(huì)忽視這一點(diǎn).
要成就一件事(一個(gè)大型企業(yè)管理應(yīng)用的項(xiàng)目), 是需要很多人踏踏實(shí)實(shí),堅(jiān)持不懈(這也非常重要)的努力.這和去上上課,或者在場(chǎng)外指導(dǎo)一下,有很大的區(qū)別.
我希望通過你這個(gè)論壇, 結(jié)識(shí)一些志同道合的朋友, 能夠作成這樣一件事.再次謝謝你的回復(fù), 我因?yàn)楹芏鄷r(shí)候很忙,有一些Deadline非常緊的事情,有時(shí)沒能馬上給您回復(fù), 請(qǐng)你見諒.
banq answer:
非常感謝JoannaYe 討論,從言論中感覺你是一個(gè)職業(yè)的項(xiàng)目經(jīng)理。非常專業(yè)。
項(xiàng)目經(jīng)理和設(shè)計(jì)師良好溝通和理解交流,是一個(gè)項(xiàng)目成功的關(guān)鍵。
關(guān)于開源和Commercial區(qū)別,我個(gè)人覺得它們之間真的沒有嚴(yán)格的區(qū)別,只不過是兩種思路的表現(xiàn):開源通過免費(fèi)產(chǎn)品賣服務(wù);Commercial是既想賣產(chǎn)品又賣服務(wù),不能因?yàn)樗漠a(chǎn)品賣錢,就是技術(shù)好,一般是市場(chǎng)品牌好。
就拿EJB實(shí)現(xiàn)來說,在所有J2EE服務(wù)器中只有開源JBoss 4.0使用AOP實(shí)現(xiàn),堅(jiān)持AOP的一些純?cè)O(shè)計(jì)派認(rèn)為EJB過時(shí)了,那么Weblogic /Websphere等這些以支持EJB自詡的服務(wù)器產(chǎn)品反而不如開源產(chǎn)品呢。這些人認(rèn)為:EJB
但是正如你說:為什么客戶還是購買Websphere等服務(wù)器,因?yàn)樗鼈冏⒅刈罱K用戶。
我認(rèn)為一直試圖在這兩者之間尋找平衡是挑戰(zhàn)的事情。
-------------------------------------------------------------------------------------------------------------------
?
shuiwx ask:
?
banq老師好,最近大致抽象總結(jié)出了一個(gè)比較淺顯的規(guī)律,既是您平均一兩個(gè)月能夠發(fā)一篇比較的適合初學(xué)者的帖子,但每一篇都可以對(duì)偶的有關(guān)知識(shí)的梳理和導(dǎo)向能夠起到很重要的作用,不敢說終生受用但也似乎會(huì)持久難忘了,在此還是要道一聲感謝。
既然題目是初學(xué)者...高質(zhì)量的J2EE系統(tǒng),那么就題目本身這個(gè)用例來說,參與者該是“novice”了,領(lǐng)域模型應(yīng)該是"高質(zhì)量的"+"J2EE系統(tǒng)",那么能否請(qǐng)您再深一步的舉個(gè)樣例來說明何為"high quality j2ee system"呢?估計(jì)您不會(huì)選petshop,但有可能會(huì)將jive和jdon算進(jìn)來,但偶真正想看到的是一個(gè)就您個(gè)人來講曾經(jīng)有過consultant經(jīng)驗(yàn)的項(xiàng)目作為例子來簡(jiǎn)要闡述下高質(zhì)量+j2ee系統(tǒng)的概貌,或者象您前面某篇論oo和數(shù)據(jù)庫的矛盾的文章一樣,能否前瞻性的給出一個(gè)在您心目中最理想的高質(zhì)量j2ee系統(tǒng)的輪廓呢?比如jsf(new version>1.1)+ejb3.0+j2ee設(shè)計(jì)模式?偶覺得struts+spring+hibernate并不敢稱為高質(zhì)量的或是j2ee系統(tǒng),所以總覺得從現(xiàn)在開始既該有意識(shí)的用一下jsf+ejb3來設(shè)計(jì)了,但由于不知道有沒有人在這方面開始吃螃蟹了,所以只好去隨大流的關(guān)心些什么ajax,xp之類的流行名詞了。但從內(nèi)心來講,無論是javascript還是組件式編程,無論是spring+hibernate還是ejb3,無論是xp還是fdd,無非是想盡量按照客戶的要求迅速提交一個(gè)界面新穎,結(jié)構(gòu)穩(wěn)定的一個(gè)能夠跨平臺(tái)的良好的系統(tǒng)吧。假如能預(yù)知何為一個(gè)好的系統(tǒng)的話,似乎事情會(huì)變的簡(jiǎn)單些,也就不必為那些喋喋不休的爭(zhēng)論著技術(shù)名詞的人們所困擾了。
但由于目前偶的能力所限和所處的時(shí)期的特殊性,似乎想馬上就拿jsf+ejb3來首選做企業(yè)級(jí)開發(fā)還有點(diǎn)不現(xiàn)實(shí),那么作為一個(gè)apprentice來說,能夠做的似乎只有學(xué)習(xí)模式了,偶不知道關(guān)于模式該學(xué)到多深才合適,只相信盡量選擇從建模的時(shí)候就配合著設(shè)計(jì)模式來考慮可能會(huì)有助于系統(tǒng)的穩(wěn)定和重用,談到這里有引申出關(guān)于題目的另外一個(gè)話題,就是“初學(xué)者”,偶覺得如果想作為計(jì)算機(jī)編程人員的話,面對(duì)著不停的新技術(shù)名詞和版本更迭,似乎偶總要做一名初學(xué)著來的說,于是最近有意識(shí)的在看一些數(shù)據(jù)結(jié)構(gòu)方面的課程,希望能夠從一些理論基礎(chǔ)中來尋找那些所謂的新技術(shù)背后所蘊(yùn)涵的知識(shí),但還是那句話,由于能力有限,所得甚淺,所以希望您如果能站在一個(gè)咨詢家的角度來看,能否指點(diǎn)一下,就您認(rèn)為的如果想設(shè)計(jì)一個(gè)好的軟件系統(tǒng)來說,或許不僅限于j2ee,該多看看哪些computer science中的理論知識(shí)呢?偶不知道這個(gè)問題提的對(duì)不對(duì),但總覺得設(shè)計(jì)模式對(duì)于系統(tǒng)的意義,是類似于數(shù)據(jù)結(jié)構(gòu)和算法之相對(duì)于程序的意義的,所以假如您在類似的方面能有些心得的話,希望能夠得到一點(diǎn)指點(diǎn)。
(偶的廢話似乎不少,希望banq老師能忍受)
?
banq answer:
很抱歉現(xiàn)在才回復(fù)你的問題:
>如果想設(shè)計(jì)一個(gè)好的軟件系統(tǒng)來說,或許不僅限于j2ee,該多看看哪些>computer science中的理論知識(shí)
設(shè)計(jì)一個(gè)好的軟件系統(tǒng)我文章里其實(shí)寫了,掌握分層解耦宗旨,學(xué)習(xí)使用一些現(xiàn)成的框架就可以了,如果你不原意囫圇吞棗,那么研究一下這些框架設(shè)計(jì)原理和模式,這些會(huì)花費(fèi)你很長(zhǎng)探索,數(shù)據(jù)結(jié)構(gòu)、編譯原理這些已經(jīng)成為底層機(jī)制,就象匯編是底層一樣,現(xiàn)在的大學(xué)計(jì)算機(jī)教學(xué)完全是錯(cuò)誤的,學(xué)習(xí)的都是正確的廢話。所以沒有必要在那些大學(xué)課程上浪費(fèi)時(shí)間。
增強(qiáng)項(xiàng)目經(jīng)驗(yàn),研讀源碼,自己動(dòng)手編寫項(xiàng)目是提升水平的唯一道路。
以上只是我個(gè)人意見。
posted on 2006-06-01 14:46
保爾任 閱讀(176)
評(píng)論(0) 編輯 收藏