《深入淺出Hibernate》讀書筆記1

作者:冉翔

 

第一部分 持久層

 

第一章           面向應(yīng)用的持久層設(shè)計

現(xiàn)今的應(yīng)用系統(tǒng)設(shè)計中,MVCModel-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ù)持久化的一個相對獨立的領(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模式

DAOData 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 ObjectDAO= Data + Accessor + domain Object

 

所謂Domain Object,簡單來講就是對領(lǐng)域內(nèi)(Domain)設(shè)計的各個數(shù)據(jù)對象,反映到代碼,就是一個擁有相關(guān)屬性的gettersetter方法的Java ClassJava 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)與原有對象相同的接口,從而得到一個基于原有對象的,對既有接口的增強性實現(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)點在于開發(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作為一個相對獨立的邏輯層次。較為清晰的體現(xiàn)了所謂持久層的概念。底層關(guān)系數(shù)據(jù)的結(jié)構(gòu)變化,可以較好地屏蔽在數(shù)據(jù)類這個層次。從而避免對上層的業(yè)務(wù)邏輯造成影響。

   缺點:隨著設(shè)計層次的增多,編碼量的增加相當(dāng)可觀。相對地一種混雜模式而言,系統(tǒng)結(jié)構(gòu)上得到較大提升的同時,項目設(shè)計和開發(fā)成本也相應(yīng)增高。

· 基于現(xiàn)有持久層框架的實現(xiàn)模式

   這種模式是第二種模式的眼神。Data Class所包含的Data AccessorDomain Class數(shù)量并沒有減少。

   只是把其中最為繁瑣的工作――基于JDBCOR映射工作,交給第三方組建完成。

   Data Accessor中的繁瑣編碼工作因此得到了空前簡化,而與此同時,伴隨持久層框架而來的輔助工具也大大減輕了Domain Class的編碼負(fù)擔(dān)。

 

1.4 持久層框架概述

一個成熟的持久化框架能為我們作些什么?

· 減少乏味的代碼

· 更加面向?qū)ο蟮脑O(shè)計

· 更好的性能

· 更好的移植性

 

1.5 主流持久層框架綜述

· Apache OJB

· Hibernate

· iBatis

· TopLink(是Oracle的商業(yè)產(chǎn)品)