軟體項目實訓及課程設計指導——如何在J2EE應用系統數據持久層中應用DAO模式
1、為什麼要在軟體應用系統中提供數據持久層
軟體應用系統中的數據持久層主要為整個軟體應用系統提供數據訪問功能服務,從而可以使軟體應用系統中的業務層組件的設計和開發人員能夠專注於系統業務邏輯的開發,並且能夠在不同應用項目中重用數據訪問功能服務——這樣將能夠避免重複地進行對目標數據的增、刪、改、查等功能的開發過程。
其次,將軟體應用系統的數據訪問服務組件從系統的業務處理邏輯中獨立出,能夠保持軟體應用系統的多層架構體系設計的優勢,繼承和延續J2EE系統平臺中特有的可伸縮性和可擴展性。
2、J2EE系統平臺中的軟體應用系統持久層的系統設計目標
(1)應用數據訪問服務接口隔離系統中的業務層和持久層之間的關係
由於軟體應用系統持久層中的的相關組件(如數據訪問操作組件和數據連接組件)是異變的、不穩定的應用組件——因為軟體應用系統的持久媒介是多樣化的(資料庫系統、XML文件、JSon文本文件、Excel數據表等形式)、數據源的連接方式也是多樣的(直接連接、帶緩存池的連接),如果數據源為資料庫系統,則物理資料庫系統的類型也是多樣化的(可以為MySql開源資料庫系統,也可能是Oracle、DB2、MS SQLServer等商業資料庫系統)。
因此為了能夠達到對具體的數據源(比如資料庫系統或者XML文件等形式)訪問操作進行屏蔽,應該只為上層的業務邏輯處理層提供有關的數據訪問服務的接口。如下示圖為體現此設計思想的原理性類關係示圖。
由此,軟體應用系統中的業務邏輯功能類相關程序只需要通過這些數據訪問服務接口內所提供的功能方法完成對不同的目標數據源中的最終數據的讀、寫相關的功能操作,而不需要具體地了解它們的具體技術實現的細節。
(2)為什麼要設計和應用數據訪問服務接口
由於軟體應用系統中的業務邏輯類和對應的數據源之間是相互分離的,並且業務對象也不需要了解應用系統中底層的數據源的具體實現,所以當軟體應用系統中的數據源發生變化(比如資料庫的類型或者對資料庫的連接方式、或者數據持久媒介發生了變化(如原本是將數據存儲到物理資料庫系統,但隨後又改變為將數據保存到XML格式的數據文件等)時,遷移僅僅涉及到需要修改軟體應用系統持久層中有關的功能實現類。請見下圖所示的體現這樣的設計目標的原理形式的UML類圖示。
從上面的示例圖中可以了解到,軟體應用系統中的業務處理功能類並沒有直接依賴某種形式的數據源的數據訪問功能操作,而是依賴數據訪問服務接口。從而隔離了軟體應用系統中的業務處理功能類對具體的數據源的依賴,也就提高了軟體應用系統的靈活性和對數據源的適應性。
(3)明確J2EE系統平臺中的軟體應用系統持久層的系統設計目標
由此可知,軟體應用系統中的系統持久層內的各個功能組件主要是為整個軟體應用系統提供一個統一的、安全可靠和支持並發訪問的數據持久訪問服務,此外,它們還應該具有透明性——軟體應用系統中的業務對象在不需要知道軟體應用系統中的目標數據源的具體類型和特定實現的細節等方面的信息,便可以使用軟體應用系統中所需要的數據源。
由此,這些設計要求也就是J2EE系統平臺中的軟體應用系統持久層的設計目標。
3、在經典的三層架構體系設計中為什麼要將業務處理層和數據持久層相互分離
J2EE技術平臺倡導軟體應用系統中的數據持久層要為整個軟體應用系統提供全部的數據訪問功能服務,從而可以使軟體應用系統業務處理層組件的開發者能夠更加地專注於軟體應用系統中與業務邏輯有關的功能開發和程序代碼實現,而軟體應用系統持久層開發人員也能夠更加專注於編寫數據訪問功能實現代碼,而且代碼的質量更高!
比如,可以為每個數據源提供對應的創建、讀取、更新和刪除操作的功能類;這樣的體系架構設計方案還能夠達到在不同的軟體應用系統項目中重用現有的數據訪問服務的效果。如下示圖為經典的軟體應用系統中三層架構體系的分層示例圖。
此外,這樣的設計方案也將能夠避免重複地進行對資料庫表中的數據增、刪、改、查等功能的開發實現過程,提高了軟體應用系統開發的總體效率。
另外,將軟體應用系統中的數據訪問服務從業務邏輯處理相關程序中獨立出,也還能夠保持J2EE系統平臺多層架構體系的優勢,從而也使得軟體應用系統在系統體系架構層次方面就具有良好的可伸縮性和可擴展性。
因此,在經典的三層架構體系的設計中,要將軟體應用系統的業務處理層和數據持久層相互分離——這在J2EE MVC架構模式中的模型處理層中也是倡導將系統的業務處理程序和系統的數據訪問程序相互分離。如下示圖為體現該設計思想的《藍夢網上商城》應用系統的體系架構設計結果的UML包圖。
4、J2EE應用系統數據持久層主要應用DAO模式實現
(1)什麼是DAO(Data Access Object,數據訪問對象)設計模式
DAO設計模式是J2EE系統平臺中所提供的標準設計模式之一,軟體應用系統的設計和開發人員通過應用此設計模式能夠達到把處於軟體應用系統底層的數據訪問操作的邏輯和位於上層的業務處理邏輯兩者相互分離。
(2)為什麼要提供DAO設計模式
此設計模式的主要作用是封裝對軟體應用系統中資料庫的各種數據訪問操作,每個DAO功能類程序實現對物理資料庫系統中某個數據表中記錄的「增(CREATE)、刪(DELETE)、改(UPDATE)、查(READER)」(簡稱為CRUD)操作。
下圖所示為在示例項目銀行帳戶信息管理系統中應用DAO模式分別為用戶信息和帳戶信息資料庫表提供對應的DAO組件接口和它們各自的功能實現類的UML類圖——在設計方面,繼續遵守「面向接口編程功能實現」的開發原則。
當然,對DAO組件類的對象實例的創建方式一般是應用工廠方法設計模式。因為工廠方法設計模式能夠將創建對象實例的功能程序與使用對象實例的功能程序相互分離。下圖所示為銀行帳戶信息管理系統中提供對帳戶DAO組件類的對象實例創建的工廠類AccountManageDAOFactory的實現代碼片段的局部圖示截圖。