隨著編程技術(shù)的快速發(fā)展,Sun公司開發(fā)的Java,以其簡單、面向?qū)ο?、分布式、健壯性、安全與系統(tǒng)無關(guān)、可移植的特點贏得了眾多編程人員的青睞,但是在實際開發(fā)過程中存在一些認(rèn)識上和方法上的誤區(qū),導(dǎo)致開發(fā)的項目出現(xiàn)一些問題,下面就來分析一下這些誤區(qū)。
1.只注重系統(tǒng)當(dāng)前功能,忽視軟件架構(gòu)的誤區(qū)。
萬丈高樓平地起,要想開發(fā)一個好的系統(tǒng),基礎(chǔ)結(jié)構(gòu)很重要,一個好的軟件不僅僅滿足于它的功能,還必須有一個靈活的、結(jié)構(gòu)清晰、可復(fù)用性好、擴(kuò)展性強(qiáng)、維護(hù)方便的的基礎(chǔ)架構(gòu)。一個靈活的、低耦合的、可擴(kuò)展的框架將使你在開發(fā)中事半功倍,便于協(xié)作開發(fā)和擴(kuò)展升級;反之,一個架構(gòu)不好、沒有擴(kuò)展性的框架在未來由于功能的成長,會因為架構(gòu)不好不利于加入新的功能,使你在開發(fā)中陷入困境。
正因為很多人對軟件存在只滿足于目前的功能,沒有考慮到今后的發(fā)展,開發(fā)的軟件擴(kuò)展性不強(qiáng),從而造成軟件的生命周期縮短。打好軟件的基礎(chǔ)架構(gòu)不僅僅是選擇一些流行的諸如Spring、Hibernate、Jdonframework之類的框架,還取決于如何合理使用這些框架來搭建你的系統(tǒng),我們使用框架時不能知其然而不知其所以然,如果一個框架不能協(xié)助你實現(xiàn)分層架構(gòu),那就拋棄它,不要盲目跟從,避免陷入復(fù)雜的技術(shù)細(xì)節(jié)迷霧中,迷失了架構(gòu)選擇的根本方向。
2.系統(tǒng)中層次不清,互相侵蝕的誤區(qū)。
Java軟件系統(tǒng)中一般分為表現(xiàn)層、業(yè)務(wù)層和持久層,三個層次應(yīng)該分割明顯,職責(zé)分明,以增強(qiáng)系統(tǒng)可移植性、擴(kuò)展性和維護(hù)性。
其中持久層由Java對象持久化類和數(shù)據(jù)訪問對象(DAO)組成。每個數(shù)據(jù)庫表都對應(yīng)著一個持久化對象,這樣就屏蔽了具體的數(shù)據(jù)庫和具體的數(shù)據(jù)表、字段,給予了開發(fā)者使用OO思想設(shè)計和開發(fā)的便利,消除了對數(shù)據(jù)庫操作的硬編碼在重用性上的弊端。
持久層只是持久化保存數(shù)據(jù)對象,業(yè)務(wù)層再對持久層進(jìn)行調(diào)用。在應(yīng)用中,要避免本末倒置,將復(fù)雜的業(yè)務(wù)加到持久層中去,同樣,也應(yīng)該避免讓持久層侵蝕業(yè)務(wù)層,在業(yè)務(wù)層中應(yīng)該只看到對業(yè)務(wù)對象的操作,而不是在業(yè)務(wù)層到處可見數(shù)據(jù)表或字段名,盡量做到“上帝的歸上帝,凱撒的歸凱撒”。
例如存儲過程的使用,在以前集中數(shù)據(jù)庫時代,依靠存儲過程解決了一些性能問題,但在現(xiàn)在多用戶、大訪問量的情況下,J2EE應(yīng)用服務(wù)器技術(shù)、中間層服務(wù)器集群技術(shù)和分布式技術(shù)發(fā)展成熟的今天,再把負(fù)載都用數(shù)據(jù)庫端的存儲過程來解決,用持久層來解決大量業(yè)務(wù)問題,很多時候會適得其反,降低性能。當(dāng)然上面這些并不是完全否定存儲過程,適量使用,使用數(shù)據(jù)庫優(yōu)點也是允許的。
3. ORM問題在應(yīng)用中的誤區(qū)
Object/Relation Mapping(ORM)技術(shù)是為了解決關(guān)系型數(shù)據(jù)庫和面向?qū)ο蟮某绦蛟O(shè)計之間不匹配的矛盾而產(chǎn)生的。Hibernate是目前最為流行的ORM框架,它在關(guān)系型數(shù)據(jù)庫和Java對象之間做了一個自動映射,使得程序員可以以非常簡單的方式實現(xiàn)對數(shù)據(jù)庫的操作。通過對JDBC的封裝,向程序員屏蔽了底層的數(shù)據(jù)庫操作,使用時只需要操縱對象,使程序員專注于OO程序的開發(fā),使開發(fā)更對象化,提高了開發(fā)效率。程序員所需要做的就是編制xml映射文件,拋棄了數(shù)據(jù)庫中心的思想,從而完全的面向?qū)ο笏枷?。?shù)據(jù)庫結(jié)構(gòu)改變時只需要更改配置文件,不會對應(yīng)用程序產(chǎn)生影響,它沒有侵入性,即所謂的輕量級框架,移植性會很好。Hibernate還有自己的面向?qū)ο蟮牟樵冋Z言HQL,HQL功能強(qiáng)大,支持Oracle、DB2、MySQL、 Microsoft SQL Server等主流數(shù)據(jù)庫,是目前應(yīng)用最廣泛的O/R映射工具。為快速開發(fā)應(yīng)用程序提供了底層的支持。
由于Hibernate的流行,Hibernate越來越受到開發(fā)者的歡迎,運用Hibernate作為數(shù)據(jù)持久化的開源框架也越來越多。但是作為一種技術(shù),它也有自己的短板,就是在批量數(shù)據(jù)處理時有弱勢,Hibernate的特性決定了它適合于針對單一對象簡單的操作,而對于大批量對象的操作,則不適合用Hibernate,這也是OR框架的弱點,要使用數(shù)據(jù)庫的特定優(yōu)化機(jī)制的時候,也不適合用Hibernate。然而在實際應(yīng)用的時候不少用戶卻忽視了這一點,很多開發(fā)人員在對Hibernate的優(yōu)缺點不是很了解的情況下,應(yīng)用了Hibernate,結(jié)果在用戶訪問量大時,出現(xiàn)內(nèi)存泄漏,導(dǎo)致了服務(wù)器死機(jī),還有就是諸如對lazy的使用不當(dāng)、關(guān)聯(lián)過多造成的數(shù)據(jù)加載緩慢等問題,都是因為開發(fā)人員對Hibernate一知半解的情況下貿(mào)然使用而造成的,因此使用時要格外當(dāng)心。
4.喜新厭舊,過分追求新技術(shù)的誤區(qū)。
很多開發(fā)人員在開發(fā)中經(jīng)常使用一些不成熟的、自己不甚了解的技術(shù),把它當(dāng)做自我挑戰(zhàn)的機(jī)會,這就無形中加大了項目開發(fā)的難度,應(yīng)該盡量使用一些自己熟悉的、相對成熟的技術(shù),降低開發(fā)成本和風(fēng)險。
5.過分注重軟件功能,忽視用戶體驗的誤區(qū)。
開發(fā)過程中有時會過分追求“完美”,造成“大而全”的現(xiàn)象,而對用戶使用的方便性認(rèn)識不夠,有時會降低軟件的友好度。
以上從幾方面談了一下Java在實際應(yīng)用是容易遇到的問題和誤區(qū),希望對大家有所幫助。
參考文獻(xiàn)
[1]Cay S. Horstmann ,Gary Cornell .《Java核心技術(shù)》.
[2]Bruce Eckel.《Java編程思想》.
[3]付京周 .《精通Hibernate ——Java數(shù)據(jù)庫持久層開發(fā)實踐》.
[4]夏昕 ,曹曉鋼, 唐勇.《深入淺出Hibernate》.