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