iBATIS不適合使用的四種情況淺析
iBATIS是一個中層的框架。它比JDBC更高層一些,但是相對于對象/關(guān)系映射工具,又要更底層一些。這使得iBATIS處于一個很獨特的位置上,使它能夠適用于一些較為特別的應(yīng)用。在本書前面的部分,我們討論了為什么iBATIS對于多種應(yīng)用類型都是有用的,包括小的桌面應(yīng)用,和較大的、企業(yè)級的Web應(yīng)用——以及任何介于這兩者之間的應(yīng)用類型。那么,iBATIS不適用的場合是什么呢?下面幾節(jié)就將詳細描述不適合使用iBATIS的各種情況,并且給出有關(guān)替代方案的建議。
iBATIS不適合使用之1當你能永遠擁有完全控制權(quán)時
如果你能夠保證擁有對應(yīng)用設(shè)計和數(shù)據(jù)庫設(shè)計的完全控制權(quán),那你一定是一個非常幸運的人。這在商業(yè)環(huán)境或者任何一個核心工作不是軟件開發(fā)的行業(yè)中都是非常少見的。然而,如果你在一個軟件公司工作,并且在開發(fā)一個你擁有完全設(shè)計控制權(quán)的且由你發(fā)售的產(chǎn)品時,那么你可能恰好處于這種情況。
當你具有完全控制權(quán)時,就有充分理由使用一個完全的對象/關(guān)系映射方案,如Hibernate。你可以充分利用對象/關(guān)系映射工具所能提供的設(shè)計優(yōu)勢并提高生產(chǎn)率??赡芨緵]有來自企業(yè)數(shù)據(jù)庫組的干擾,也不需要與遺留系統(tǒng)整合。此外,數(shù)據(jù)庫可能是與應(yīng)用一同部署的,這使得它屬于應(yīng)用數(shù)據(jù)庫的范疇(參見第1章)。使用Hibernate的應(yīng)用的一個很好的例子就是,Atlassian的JIRA。它們提供了一個問題跟蹤軟件,作為一個他們可以完全控制的發(fā)布產(chǎn)品。
然而,還需要考慮應(yīng)用未來的發(fā)展。如果數(shù)據(jù)庫有可能超出應(yīng)用開發(fā)者的控制,那么你就必須仔細考慮一下使用對象/關(guān)系映射將對你的持續(xù)化策略帶來怎樣的影響。
iBATIS不適合使用之2當你的應(yīng)用需要完全動態(tài)的SQL時
如果你的應(yīng)用的核心功能是動態(tài)生成SQL,那么iBATIS就是錯誤的選擇。iBATIS支持非常強大的動態(tài)SQL特性,這些特性又反過來支持高級查詢能力,甚至一些動態(tài)更新功能。然而,如果你的系統(tǒng)中每個語句都是動態(tài)地生成的,那么你***使用原始的JDBC,甚至可以創(chuàng)建你自己的框架。
iBATIS的強大功能之一就是它允許你擁有完全的自由,可以手工編寫和直接操作SQL。當應(yīng)用中大部分的SQL都是從某些SQL生成類動態(tài)地生成時,這種優(yōu)勢就會很快喪失。
iBATIS不適合使用之3當你并沒有使用關(guān)系數(shù)據(jù)庫時
對于關(guān)系數(shù)據(jù)庫之外的其他數(shù)據(jù)庫,也存在可用的JDBC驅(qū)動。對于平板文件,微軟Excel電子數(shù)據(jù)表,XML,以及其他類型的數(shù)據(jù)存儲平臺,都有相應(yīng)的JDBC驅(qū)動。雖然一些人在iBATIS中使用這些驅(qū)動也獲得了成功,但是對于大多數(shù)用戶我們并不推薦使用這些驅(qū)動。
iBATIS并不會對你的環(huán)境做出任何假設(shè)。但是它確實期望你使用的是真正的關(guān)系數(shù)據(jù)庫,即支持事務(wù)、相對典型的SQL、和存儲過程這些語義的關(guān)系數(shù)據(jù)庫。即使一些非常著名的數(shù)據(jù)庫也可能不支持關(guān)系數(shù)據(jù)庫的某些重要特性。如MySQL的早期版本就不支持事務(wù),因此iBATIS不能很好地處理MySQL。幸運的是,當前的MySQL已支持事務(wù)并且還有一個非常符合規(guī)范的JDBC驅(qū)動。
如果你使用的不是真正的關(guān)系數(shù)據(jù)庫,我們推薦你***使用原始的JDBC,甚至更底層的文件I/O API。
iBATIS不適合使用之4當iBATIS不起作用時
隨著社區(qū)提出的需求越來越多,iBATIS也不斷地實現(xiàn)了許多非常好的特性。然而,iBATIS是有其自己的發(fā)展方向和設(shè)計目標的,這樣一來它有時候就有可能會同一些應(yīng)用的需求發(fā)生沖突。人們在軟件幫助下可以完成很多神奇的事情,但是有時候由于需求過于復(fù)雜,軟件可能會完全不起作用,iBATIS也是如此。雖然我們也可以在iBATIS中添加特性以支持這些復(fù)雜的需求,但是這么做可能會極大地提高復(fù)雜性,甚至可能會改變iBATIS框架的適用范圍。因此,我們不會修改框架。為了解決以上問題,我們將提供可擴展的接口,這樣你就可以擴展iBATIS以滿足幾乎任何需求。事實上,有時候iBATIS就是不起作用。此時,***另尋一個更好的解決方案,而不是“霸王硬上弓”地將iBATIS(或者其他任何框架)用在不合適的地方。
iBATIS不適合使用的時期就向你介紹到這里,那么通過介紹你是不是對iBATIS不適合使用的時期有點自己的認識呢?
【編輯推薦】