??????????????????????
選擇 Spring+Hibernate EJB3還是POJO + JDBC呢?
??
?剛開始做項(xiàng)目的時(shí)候我們什么都沒(méi)有,沒(méi)有JAVA,沒(méi)有數(shù)據(jù)。用戶的數(shù)據(jù)存放到那呢?慢慢的,就出來(lái)了關(guān)系數(shù)據(jù)庫(kù),SQL也就誕生了。有人
說(shuō):“讓JAVA訪問(wèn)數(shù)據(jù)庫(kù),JDBC誕生了。"有一些人說(shuō)JDBC是好的,但也有人說(shuō)JDBC是不好的,所以容器管理EJB出現(xiàn)了。有人說(shuō),J2EE容
器不好,POJO又復(fù)興了。實(shí)體BEAN的性能不怎么好,比較慢并且很重;Hibernate出現(xiàn)了,人們可以忘記SQL了,因?yàn)樗惶先藗兊牧?xí)慣。
有人說(shuō),J2EE是不好的,他從J2EE中分出一個(gè)Spring的框架。有一半的人說(shuō)沒(méi)有什么事情是好的,他們創(chuàng)建了很多的JAVA框架。一個(gè)對(duì)java
不是很熟悉的人說(shuō):”我不舒服很疲憊,那么多的東西要選擇,我將回到JAVA EE中。”
??
?一些企業(yè)級(jí)的JAVA商店是使用J2EE應(yīng)用服務(wù)器和EJB2.X創(chuàng)建的,它們的結(jié)合建立他們的應(yīng)用是過(guò)度了些(殺雞用牛刀),覺(jué)得去選擇另
外的一些框架。Spring框架和Hibernate框架的結(jié)合似乎是j2ee的一個(gè)合理的選擇,但是他們的組合是jee一個(gè)輕量級(jí)的架構(gòu),尤其當(dāng)非常簡(jiǎn)
單的EJB3.0是可以使用的。
?? ?依我的觀點(diǎn)來(lái)看,不僅Spring/Hibernate的組合,或者它們單獨(dú)使用都是非常好的框架。可以重復(fù)使用它們的組件,非常輕便的。
?? ?Spring框架是一些組件的集合它們能夠單獨(dú)的使用,而且你也可以一起使用它們通過(guò)添加X(jué)ML文件。如果你就這樣做那么你就會(huì)要使用很多的XML。如果你單獨(dú)的使用Spring框架的任意組件,它都是輕便的。
But since it takes two to tango,it's as if you're pulling a tiny roll
of thin wire out of your pocket (a.k.a. XML),which becomes heavyweight
because wires tend to twist and create a mess.(那位幫我完成?謝謝!)
??
?關(guān)于Hibernate,我不能夠肯定為什么那么多的人把它當(dāng)做首選。我明白一個(gè)企業(yè)架構(gòu)將使用它,投資一個(gè)新的設(shè)計(jì)在許多的商業(yè)應(yīng)用,迫使
更多的企業(yè)把它作為標(biāo)準(zhǔn)去實(shí)現(xiàn)數(shù)據(jù)持久化。如果你是開發(fā)一個(gè)典型的CRUD的應(yīng)用,尤其當(dāng)你已經(jīng)在使用它而且數(shù)據(jù)庫(kù)沒(méi)有完全設(shè)計(jì)出來(lái),為什么更加為
HIBERNATE而擔(dān)心呢?SQL是你受驚嚇了?
?? ?Take an application built on Spring components
interconnected with thin wires, put Hibernate on top of itwith wires of
a different diameter, and the maintainability of your application will
decrease while hard- to-find bugs make themselves at home in your
application.(那位幫我完成?謝謝!)
????
最近的3,4年,許多的人對(duì)EJB是憤怒的,把它作為一個(gè)多余的有著許多繁瑣的XML描敘文件的復(fù)雜框架。現(xiàn)在EJB3.0,使用注釋,視圖在一次的去吸
引企業(yè)級(jí)開發(fā)員。這不是那么容易的,EJB給他們是一個(gè)不好的映像。當(dāng)你用Spring/Hibernate取代EJB時(shí),你不要欺騙你自己,它沒(méi)有使你
的開發(fā)容易許多。
??
?我相信在單獨(dú)的POJO的環(huán)境中他們沒(méi)有什么不了解的,知道怎樣去執(zhí)行特定的功能(例如,發(fā)送消息,事務(wù)管理,基于提供的SQL創(chuàng)建好的報(bào)
表,一些財(cái)經(jīng)領(lǐng)域的過(guò)程【model some financial
process】,查找最好的線路,等等)。僅僅傳遞一些必須的參數(shù)到一個(gè)黑合中,返回結(jié)果,無(wú)論你想要什么。Ioc和依賴注入不是新鮮的事情,它工作的
非常好。十多年以來(lái),我一直使用它(不知道它將來(lái)的名字)在PB的應(yīng)用中。它出現(xiàn)在事件驅(qū)動(dòng)程序中。我是創(chuàng)建用戶對(duì)象關(guān)于用戶事件。無(wú)論誰(shuí)想傳遞一些信息
到這個(gè)對(duì)象將激活一個(gè)用戶事件,這個(gè)事件將攜帶數(shù)據(jù)注入到正確的對(duì)象中。look,ma!,no,
wires!,今天,我同樣的在ActionScript3中使用。停止配置(stop
wiring),僅僅寫一些代碼業(yè)務(wù)應(yīng)用的需要,一個(gè)新的應(yīng)用忘記那些配置。不要忘記那些可以再度使用的組件。
?? ?今天,Spring也許是JAVA中最好的框架之一。它有一個(gè)缺點(diǎn),那就是它是一個(gè)框架(可能說(shuō)它不是一個(gè)標(biāo)準(zhǔn)吧)
??
?Hibernate提供一個(gè)緩沖對(duì)象。好的,讓我們使用它,整個(gè)工作都不需要安裝什么。在某處獲取一個(gè)緩沖組件,準(zhǔn)備你的行動(dòng),傳遞所有需要
的參數(shù)構(gòu)造你的對(duì)象。Stop wiring(停止配置),返回到程序。。聯(lián)合SQL,JDBC,緩沖(如果有必要)的知識(shí),和一個(gè)分頁(yè)組件(如果
有必要)它能取得更多。
??
?在我新介紹的一些JAVA程序員,我問(wèn)他一個(gè)問(wèn)題:“誰(shuí)知道怎樣從數(shù)據(jù)庫(kù)表中刪除重復(fù)的數(shù)據(jù)”。沒(méi)有一個(gè)人知道。當(dāng)我問(wèn)題同樣的問(wèn)題在論壇
上,一些JAVA程序員很自信的回復(fù)這是關(guān)于HIBERANTE,首先你不能重復(fù)的創(chuàng)建。非常的謝謝。關(guān)于一些現(xiàn)實(shí)的經(jīng)驗(yàn)。如果數(shù)據(jù)庫(kù)表臟的數(shù)據(jù)已經(jīng)存
在,并且弄臟每天都在發(fā)生。你不要欺騙自己了,學(xué)習(xí)SQL吧。
?? ?如果你想寫一個(gè)簡(jiǎn)單的應(yīng)用,不要尋找一些輕量的第三,第四方的框架開始。你的業(yè)務(wù)邏輯在POJO中,你的數(shù)據(jù)訪問(wèn)在DAO中。保持它是簡(jiǎn)單的。需要事務(wù)嗎?找一個(gè)事務(wù)管理。需要可是升級(jí)嗎?考慮使用異步消息在兩個(gè)組件之間。
?? ?
?? ? Floyd Marinescu
在它的《開始EJB3》的緒言中說(shuō)到。EJB3是一個(gè)非常重要的里程碑為規(guī)范。它不僅意味著容易使用,而且它是首先(在作者看來(lái))這個(gè)規(guī)范創(chuàng)建,開發(fā)群體
的證明他們所需要的,使EJB3是最佳實(shí)踐的標(biāo)準(zhǔn)話,取代原來(lái)的委員會(huì)所定制的。
?? ?他是偉大的,來(lái)自一些誹謗的社團(tuán)的壞家伙最終他們充滿著快樂(lè),他們實(shí)際上是專家,具有最佳的實(shí)踐和許多開源框架的思想。
?? ?有人說(shuō),回到JEE的標(biāo)準(zhǔn),他創(chuàng)建一個(gè)JAVA EE1.5并且非常好。它不是最好的,但是給人們一個(gè)共同點(diǎn),孕育了一個(gè)新的企業(yè)級(jí)應(yīng)用。
BTW:原文來(lái)自(http://java.sys-con.com/read/299903.htm),翻譯的巨爛,希望能拍磚,指出錯(cuò)誤。我也是嘗試著翻譯一些文章,希望能夠提供自己的閱讀能力。