《深入淺出Hibernate》讀書筆記1
作者:冉翔
第一部分 持久層
第一章 面向應(yīng)用的持久層設(shè)計
現(xiàn)今的應(yīng)用系統(tǒng)設(shè)計中,MVC(Model-View-Control)作為主流系統(tǒng)架構(gòu)模式之一,貫穿了整個設(shè)計流程。MVC中的M,也就是所謂的Model,則可以說是與業(yè)務(wù)邏輯和數(shù)據(jù)邏輯關(guān)聯(lián)最為緊密地部分。而持久層作為Model層面中的主要組成,其設(shè)計的優(yōu)劣必對系統(tǒng)的整體表現(xiàn)產(chǎn)生至關(guān)重要的影響。
1.1 持久層概述
持久(Persistence)。簡單來講,也就是把數(shù)據(jù)保存到可掉電式存儲設(shè)備中供之后使用。
所謂“持久層”,也就是在系統(tǒng)邏輯層面上,專注于實現(xiàn)數(shù)據(jù)持久化的一個相對獨(dú)立的領(lǐng)域(Domain)。
1.2 持久層設(shè)計
1.2.1 持久層設(shè)計與解耦合
1.2.1.1 何謂耦合,何謂解耦合
何謂耦合?通俗地講,就是事物之間的相互關(guān)聯(lián)關(guān)系。
何謂解耦合?即采用一些手段降低關(guān)聯(lián)的緊密程度。
1.2.1.2 解耦合思想的自然演講
1.2.1.3 解耦合設(shè)計的目標(biāo)
·應(yīng)用層解耦合――應(yīng)用邏輯與數(shù)據(jù)邏輯相分離
·資源曾解耦合――邏輯結(jié)構(gòu)與物力結(jié)構(gòu)相分離
1.2.1.4 持久層解耦合與DAO模式
DAO(Data Access Object)模式實際上是兩個模式的組合。即Data Accessor模式與Active Domain Object模式,其中Data Accessor模式實現(xiàn)了數(shù)據(jù)訪問和業(yè)務(wù)邏輯的分離,而Active Domain Object模式實現(xiàn)了業(yè)務(wù)數(shù)據(jù)的對象化封裝,一般我們將這兩個模式組合使用。
DAO模式通過對業(yè)務(wù)層提供數(shù)據(jù)抽象層接口,實現(xiàn)了以下目標(biāo):
1. 數(shù)據(jù)存儲邏輯的分離
2. 數(shù)據(jù)訪問底層實現(xiàn)的分離
3. 資源管理和調(diào)度的分離
4. 數(shù)據(jù)抽象
Data Accessor:即將數(shù)據(jù)訪問的實現(xiàn)機(jī)制加以封裝,與數(shù)據(jù)的使用代碼相分離,從外部來看,Data Accessor提供了黑盒式的數(shù)據(jù)存取接口。
Domain Object:則提供了對面向領(lǐng)域內(nèi)對象的封裝。
Data Accessor Object(DAO)= Data + Accessor + domain Object
所謂Domain Object,簡單來講就是對領(lǐng)域內(nèi)(Domain)設(shè)計的各個數(shù)據(jù)對象,反映到代碼,就是一個擁有相關(guān)屬性的getter,setter方法的Java Class(Java Bean)。
1.2.1.5 DAO模式的進(jìn)一步改良
· Factory模式的引入
· Proxy模式的引入
1.2.2 持久層設(shè)計與資源管理模式
1.2.2.1 Connection Pool
數(shù)據(jù)庫連接池的基本原理是在內(nèi)部對象池中維護(hù)一定數(shù)量的數(shù)據(jù)庫連接,并對外暴露數(shù)據(jù)庫連接獲取和返回方法。
數(shù)據(jù)庫連接池技術(shù)帶來下面的優(yōu)勢:
1. 資源重用
2. 更快的系統(tǒng)響應(yīng)速度
3. 新的資源分配手段
4. 統(tǒng)一的連接管理,避免數(shù)據(jù)庫連接泄漏
·Decorator模式
Decorator模式的主要目的是利用一個對象,透明地為另一個對象添加新的功能。
簡單來講,就是通過一個Decorator對原有對象進(jìn)行封裝,同時實現(xiàn)與原有對象相同的接口,從而得到一個基于原有對象的,對既有接口的增強(qiáng)性實現(xiàn)。
·Dynamic Proxy模式
嚴(yán)格來講,Dynamic Proxy本身并非一種模式,只能算是Proxy模式的一種動態(tài)實現(xiàn)方式。
·他山之石
·Apache Jakarta Commons DBCP
·Proxool
1.2.2.2 Statement Pool
1.3 持久層設(shè)計與ORM
1.3.1 ORM概述
ORM – Object/Relation Mapper:對象-關(guān)系型數(shù)據(jù)映射組件。
O/R Mapping描述的是一種設(shè)計思想或者實現(xiàn)機(jī)制,而O/R Mapper一般指根據(jù)O/R原理設(shè)計的持久化框架,其中包含了除O/R本身之外的更多內(nèi)容,如SQL自生成,事務(wù)管理,Cache管理等。
1.3.2 持久層實現(xiàn)類型
· 混雜模式
這種模式的優(yōu)點(diǎn)在于開發(fā)的迅速便捷。對于原型系統(tǒng)或者小型應(yīng)用而言顯得別具意義。但基于這種模式開發(fā)的系統(tǒng),其維護(hù)性和擴(kuò)展性較差,對象屬性,數(shù)據(jù)庫結(jié)構(gòu)的變動都將直接導(dǎo)致業(yè)務(wù)邏輯代碼的修改。
· 基于Data Class的持久層實現(xiàn)模式
DAO模式就是這種模式的一種典型實現(xiàn)。
在這種模式中,我們實現(xiàn)了業(yè)務(wù)邏輯與此曾數(shù)據(jù)結(jié)構(gòu)之間的分離。Data Class作為一個相對獨(dú)立的邏輯層次。較為清晰的體現(xiàn)了所謂持久層的概念。底層關(guān)系數(shù)據(jù)的結(jié)構(gòu)變化,可以較好地屏蔽在數(shù)據(jù)類這個層次。從而避免對上層的業(yè)務(wù)邏輯造成影響。
缺點(diǎn):隨著設(shè)計層次的增多,編碼量的增加相當(dāng)可觀。相對地一種混雜模式而言,系統(tǒng)結(jié)構(gòu)上得到較大提升的同時,項目設(shè)計和開發(fā)成本也相應(yīng)增高。
· 基于現(xiàn)有持久層框架的實現(xiàn)模式
這種模式是第二種模式的眼神。Data Class所包含的Data Accessor和Domain Class數(shù)量并沒有減少。
只是把其中最為繁瑣的工作――基于JDBC的OR映射工作,交給第三方組建完成。
Data Accessor中的繁瑣編碼工作因此得到了空前簡化,而與此同時,伴隨持久層框架而來的輔助工具也大大減輕了Domain Class的編碼負(fù)擔(dān)。
1.4 持久層框架概述
一個成熟的持久化框架能為我們作些什么?
· 減少乏味的代碼
· 更加面向?qū)ο蟮脑O(shè)計
· 更好的性能
· 更好的移植性
1.5 主流持久層框架綜述
· Apache OJB
· Hibernate
· iBatis
· TopLink(是Oracle的商業(yè)產(chǎn)品)
呵呵:)