JDO規(guī)范的出臺,給了傳統(tǒng)的數(shù)據(jù)庫應用,尤其是WEB方式的數(shù)據(jù)庫應用一個新的機會,就是采用透明的中間件存儲技術,減少傳統(tǒng)開發(fā)的繁瑣工作,提高開發(fā)和維護的效率,使我們能夠應對新的互聯(lián)網(wǎng)時代的日益迅速的需求變化。 從開發(fā)的角度來看,我們進行J2EE標準的Web應用開發(fā)時,如果涉及到數(shù)據(jù)庫,一般具有一定經(jīng)驗的開發(fā)團隊都不會采用JSP+JDBC的方式直接進行數(shù)據(jù)庫操作,那樣做一方面工程浩大,代碼冗長,另一方面不易維護,危險性更大。一個簡單的類似下面的語句: resultSet = preparedStatement.execute(); ... preparedStatement = connection.prepareStatement(...); 看上去沒什么問題,但運行過程中會漸漸導致服務器死機,因為第二條語句前面少了一句 preparedStatement.close(),這樣導致一些非JVM分配的內(nèi)存永遠無法回收(因為不歸Java的垃圾回收機制管)。這種問題就對不是非常精通JDBC的程序員來說,是非常容易犯的,最重要的是,發(fā)生這種問題后,要查出其中的問題來,在代碼量較大的情況下,你會發(fā)現(xiàn)這比聯(lián)合國在伊拉克的核查工作復雜得多。 因此,有經(jīng)驗的開發(fā)團隊會采用一些JavaBean來包裝數(shù)據(jù)對象,這也是面向?qū)ο箝_發(fā)方式的需要。然而,就算是這種采用ValueObject來包裝數(shù)據(jù)庫數(shù)據(jù)的方式,依然存在以上的風險。 這只是問題的一方面,在應用開發(fā)需求越來越多的情況下,傳統(tǒng)的開發(fā)方式的效率和可維護性已經(jīng)跟不上需要。很多公司對此只有兩種解決方案:一是擴充招人,但這樣涉及到開發(fā)水平和培訓方面的成本問題;二是推遲或取消一些相對次要的開發(fā)任務,不過這樣只會拖慢企業(yè)的發(fā)展。 就是在這樣的情況下,在國際上一些在這方面比較有經(jīng)驗的企業(yè)(如Sun,IBM等)才聯(lián)合起來制定了JDO規(guī)范,以求讓開發(fā)人員擺脫這方面的風險,從復雜而繁瑣并且重復性很大的工作中解脫出來,以全新的完全面向?qū)ο蟮母拍詈蜆I(yè)務意識來指導開發(fā)。JDO規(guī)范相對EJB來說,實現(xiàn)簡單而性能出眾,可大大節(jié)約公司的開發(fā)成本,因此得到很多公司的擁戴,盡管JDO1.0規(guī)范才公布不到一年,實現(xiàn)JDO規(guī)范的產(chǎn)品卻如雨后春筍一般冒出來,比如美國(Kodo, FrontierSuite, FastObjects, etc.)、法國(Libelis LiDO)、南非(JDOGenie)、德國(JRelay)等廠商都有比較不錯的產(chǎn)品(從中我們可以看出Java是一個比較開放、比較國際化的東西),另外,除了這些商業(yè)產(chǎn)品之外,還有一些見義勇為的壯士組成一些團隊提供免費產(chǎn)品(Implementation),比如TJDO,Xorm,OJB等等。 下面我們就來看看JDO到底能給我們帶來什么。
1、節(jié)約開發(fā)成本和時間。 使用JDO,據(jù)對目前采用JDO的一些公司的統(tǒng)計,在開發(fā)中大概節(jié)約30%代碼量,在維護中大概節(jié)約60%的工作。盡管這些數(shù)據(jù)來自JDO產(chǎn)品提供商,但從用戶的角度來看,我認為這個數(shù)字并不過分。因為傳統(tǒng)的開發(fā)方式代碼量很大,導致開發(fā)人員多,開發(fā)時間長,人一多,相互的協(xié)調(diào)和溝通難度就大,開發(fā)時間長,開發(fā)人員的記憶力有限,前后代碼的連貫性一致性也會受到影響。而采用JDO后,開發(fā)人員需要寫的代碼,主要是對數(shù)據(jù)層的包裝部分,將大大減少,應用中的代碼將主要集中在業(yè)務邏輯的處理上。俗話說,做得多,錯得多,做得少,錯得少。雖然有點消極,但也說明這個事實。當我們的手工代碼變少后,出錯的機率就會小很多,就算出錯,也很容易查出來。當這些目標達到后,對JDO的一次性投入(比如購買JDO產(chǎn)品及相關培訓),比起傳統(tǒng)的開發(fā)開銷來,就會顯得微不足道。人力成本方面更是,原來三個人的工作,現(xiàn)在可以兩個人做(因為工作量減少了),這就節(jié)省了一個人力的成本。
2、提高應用性能,尤其是Web應用。 JDO廠商們都在利用多年的經(jīng)驗對底層數(shù)據(jù)庫操作進行了大量的優(yōu)化,而這些優(yōu)化,一般的程序員由于經(jīng)驗和復雜性,都比較難做到,比如分布式緩沖、JDBC2.0和JDBC3.0中的一些面向性能優(yōu)化的高級處理等等。因此,我們使用JDO產(chǎn)品的話,就可以利用這些由廠商提供的優(yōu)化來提高服務器的性能。一般的廠商都會提供很多性能調(diào)節(jié)的參數(shù),以針對不同的具體情況。
3、更靈活的業(yè)務邏輯。 由于JDO解放了開發(fā)人員在數(shù)據(jù)底層的工作,他們可以集中精力考慮業(yè)務邏輯方面的事務,與需求方也更容易溝通,不會象原先一樣,凡聽到一個新的需求或變更時心里首先想到的是要加多少數(shù)據(jù)表,外鍵如何關聯(lián),越想越復雜,最終拒絕需求。采用JDO后,開發(fā)人員可以更快地實現(xiàn)業(yè)務邏輯,即使是做試驗,也更加方便快捷,比如想對需求方提出兩種不同的實現(xiàn)方案供效果比較,做起示范程序來就能迅速完成,而傳統(tǒng)方式中能在同樣的時間內(nèi)完成一種就已經(jīng)很不錯了。當開發(fā)人員可以與需求方更好地溝通后,能更準確地理解需求,并且往往能提出比較專業(yè)的意見以改善業(yè)務邏輯,這樣,對雙方都能有更好的鍛煉。
4、有利于開發(fā)團隊的穩(wěn)定。 這里所說的穩(wěn)定并不是說人員都比較固定,而是說開發(fā)中的角色比較固定,工作定位比較固定。比如關心性能的人負責映射層,他需要了解所采用的JDO產(chǎn)品的具體實現(xiàn),以及如何將業(yè)務模型有效地映射到數(shù)據(jù)庫上,而關心代碼的人不用考慮這些細節(jié),只需要在面向?qū)ο蟮臄?shù)據(jù)模型(一般是一個或復雜或簡單的實體類圖)的基礎上進行業(yè)務邏輯的實現(xiàn)。各有各的責任,分工更明確,整體工作效率得到大大提高。也就是說,采用JDO技術后,項目開發(fā)中更容易實現(xiàn)任務的縱向劃分,不同類型的任務由不同的人做。而傳統(tǒng)的方式中,項目一般只能實現(xiàn)橫向的分工,一人做一塊,每一塊都是從界面到JavaBean再到數(shù)據(jù)庫全包,如果縱向劃分的話,因為任務之間難以確定接口規(guī)范,導致大家互相抱怨,從情緒上已經(jīng)影響了開發(fā)的進展,這就是為什么很多項目一開始都設想得很好,而具體做的時候會互相牽連,導致“無工不拖”的局面。JDO技術,由于是一種比較實際可行的規(guī)范,便項目管理者能更好地分配工作任務,相互之間更容易“劃清界限”。這樣的方式下,項目開發(fā)就不易受人員流動的影響,因為:第一,如果走掉一名開發(fā)人員,只要補充一個人,或者將其工作分配到另一人身上,讓他明確責任,對其它開發(fā)人員的影響并不大,不象以前“走一人癱一塊”;第二,如果工作量大了,需要新加入開發(fā)人員,對其的進入工作狀態(tài)的培訓比以前簡單,因為越來越多的人會熟悉并精通JDO規(guī)范,就象會Java一樣,有了這個基礎,只要了解一下業(yè)務邏輯就可以進行開發(fā)了,這也是規(guī)范化的好處。就象很多外資企業(yè)一樣,大家都是螺絲釘,人員流動性雖然大,但公司的發(fā)展卻很穩(wěn)定。
5、提供更多的個人發(fā)展機會。 對開發(fā)人員來說,長年累月一成不變而又低效的工作方式是最大的殺手,是在扼殺自己的生命。采用JDO技術后,他們會看到原來開發(fā)可以如此容易,原來還有更多的業(yè)務邏輯方面的東西值得自己關注和投入精力。開發(fā)人員的思維會從底層的代碼轉(zhuǎn)移到高級的業(yè)務處理上來,因為自己的開發(fā)方式已經(jīng)有規(guī)范化的質(zhì)的提升。我估計,以后會出現(xiàn)JDO認證之類的概念,在萬一的情況下的求職將會更加容易。畢竟一種規(guī)范帶來的東西往往是多方面的改善。當開發(fā)人員更多地思考業(yè)務方面的問題后,對需求方的業(yè)務流程往往會有更規(guī)范的意見,從而引起雙方的良性循環(huán)。以住的開發(fā)人員,常常會想為什么很多大公司的老板都不是做開發(fā)而是做業(yè)務的,以后自己的出路在哪里。其實,開發(fā)人員完全可以在開發(fā)過程中了解業(yè)務方面的內(nèi)容,對自己以后的發(fā)展也有好處,并且,思維將會更加嚴謹,原則性更強。
以上只是JDO所能帶來的比較明顯的幾個好處,實際上還有更多的好處等待我們在使用中去發(fā)掘,去研究。在以后的文章中,我會從具體的開發(fā)過程入手,描述如何使用JDO來開發(fā)項目。
相關討論:
http://m.95time.cn/bbs/NewsDetail.asp?id=1043092
出處:CSDN
責任編輯:無意
◎進入論壇網(wǎng)絡編程版塊參加討論
|