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