軟體項目實訓及課程設計指導——如何在數據持久層中應用DAO模式

2020-12-06 楊教授工作室

軟體項目實訓及課程設計指導——如何在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的實現代碼片段的局部圖示截圖。

相關焦點

  • 軟體項目實訓及課程設計指導——UML靜動態建模在詳細設計中應用
    軟體項目實訓及課程設計指導——UML靜態和動態建模技術在詳細設計中的應用示例1.1 在軟體應用系統的詳細設計中要充分應用UML靜態和動態建模技術1、再次理解UML技術規範中的「統一」的內涵(2)在課程設計的項目開發中要充分應用UML靜態和動態建模技術在課程設計的項目開發中,作者強烈地要求讀者要應用UML所提供的各種技術規範實現所開發的軟體應用系統項目的分析、設計和開發實現等過程,這並不是要求讀者為了UML而應用「UML」——因為UML的統一建模的機制抓住了軟體應用系統的本質,它能夠定義軟體應用系統的體系結構
  • 軟體項目實訓及課程設計指導——如何實現面向對象的系統架構設計
    軟體項目實訓及課程設計指導——如何實現面向對象的系統架構設計1、什麼是面向對象的軟體應用系統的架構設計從軟體應用系統的架構設計師的角度來看,所謂的軟體應用系統的系統架構就是一套構建軟體應用系統的整體結構的各種設計準則
  • 如何應用數據訪問服務層分離系統中的業務層和持久層之間耦合關係
    軟體項目實訓及課程設計指導——如何應用數據訪問服務層分離業務層和持久層之間耦合關係作者已經在本系列文章《軟體項目實訓及課程設計指導--如何正確地設計J2EE應用系統持久層中的各個組件結構及關係》中為讀者介紹了為什麼要設計和應用數據訪問服務接口的目的及如何設計該接口以真正達到利用數據訪問服務層組件隔離業務處理邏輯和數據訪問操作邏輯的應用效果
  • 項目實訓及課程設計——如何合理地設計軟體應用系統的Web表示層
    軟體項目實訓及課程設計指導——如何合理地設計軟體應用系統的Web表示層1、用戶界面是軟體應用系統的門面,在設計和開發實現時必須高度重視軟體應用系統表示層內的各個組件是軟體應用系統的前端界面組件,它們直接與應用該軟體應用系統的最終操作者發生各種人機互動行為。
  • 課程設計指導——如何應用XML+XSLT技術分離Web表示層數據和樣式
    軟體項目實訓及課程設計指導——如何應用XML+XSLT技術分離Web表示層數據和樣式1、「XML+XSLT」技術在J2EE技術平臺中的應用Java語言及相關的應用技術的產生解決了跨平臺的軟體應用系統的開發,但沒有解決如何實現跨平臺的數據交換問題。
  • 軟體項目實訓及課程設計指導——系統設計中的系統架構設計示例
    軟體項目實訓及課程設計指導——軟體系統設計中的系統架構設計示例1、軟體系統概要設計中所涉及的主要設計內容和工作過程(1)在軟體應用系統項目的系統概要設計工作中,首先是要完成軟體系統的總體架構設計及系統的分層設計,然後再利用UML包視圖體現出軟體系統架構設計的最終結果
  • 軟體項目實訓及課程設計指導——軟體系統設計中的系統架構設計示例
    軟體項目實訓及課程設計指導——軟體系統設計中的系統架構設計示例 1、軟體系統概要設計中所涉及的主要設計內容和工作過程 (1)在軟體應用系統項目的系統概要設計工作中,首先是要完成軟體系統的總體架構設計及系統的分層設計,然後再利用
  • 軟體項目實訓及課程設計指導——如何在項目中實現日誌、事務功能
    軟體項目實訓及課程設計指導——如何在J2EE平臺項目中實現交易日誌、事務控制等功能1.1 基於面向切面AOP設計思想的系統架構設計實現交易日誌的應用示例1、面向對象OOP設計中的「開-閉」(OCP,Open-Close Principle)設計原則
  • 軟體項目實訓及課程設計指導——如何實現面向服務的系統架構設計
    軟體項目實訓及課程設計指導——如何實現面向服務的系統架構設計1、什麼是基於SOA的軟體系統架構(1)什麼是面向服務的軟體系統體系架構所謂的SOA(Service-Oriented Architecture,面向服務的軟體系統體系架構
  • 如何正確地應用JDBC API設計實現應用系統持久層中的各個DAO組件
    軟體項目實訓及課程設計指導——如何正確地應用JDBC API設計和實現應用系統持久層中的各個DAO組件1、Java 系統平臺中實現資料庫連接技術相關的APIJava 資料庫連接技術(JDBC,Java DataBase Connectivity)是一種將Java
  • 軟體項目實訓及課程設計指導——實體類結構和類關係的設計示例
    軟體項目實訓及課程設計指導——系統概要設計中的實體類結構和關係的設計示例1、軟體應用系統中的實體類及主要的作用軟體應用系統中的實體類主要是指軟體系統中代表人、地點、事物或概念等方面的數據對象。採用實體關係圖描述軟體應用系統中的數據模型,能夠幫助軟體應用系統的設計人員預先精確定義出軟體應用系統中的各種數據需求,使軟體應用系統的設計人員能夠對以後的系統改進和軟體應用系統可能的需求變化做出有效的設計規劃——能夠隨著軟體應用系統的開發實現的進展,不斷地改進和完善軟體應用系統的規劃、設計和重構。
  • 如何正確地應用Web MVC架構模式分離表示層和模型處理層耦合關係
    軟體項目實訓及課程設計指導——如何正確地應用Web MVC架構模式分離表示層和模型處理層耦合關係1、MVC體系架構設計模式是用來幫助系統設計人員控制「變化」的一種設計模式MVC體系架構設計模式是上世紀80年代在Smalltalk-80中出現的一種軟體設計模式
  • 如何應用策略設計模式分離JDBC資料庫連接中的外部環境信息
    軟體項目實訓及課程設計指導——如何應用策略設計模式分離JDBC資料庫連接中的外部環境信息1、什麼是策略(Strategy)設計模式策略設計模式把「算法」(也就是軟體應用系統中的業務規則或者待實現的功能等)和「環境」(封裝軟體應用系統在實際應用時的場景)相互分離
  • 如何應用GOF設計模式中的創建型模式實現鬆耦合地創建對象實例
    軟體項目實訓及課程設計指導——如何應用GOF設計模式中的創建型模式實現鬆耦合地創建對象實例1、GOF設計模式中的工廠模式在GOF設計模式的劃分中,把與實現對象的實例化相關的模式稱之為「創建型模式」——而其中的工廠模式為創建型模式中的一種具體實現形式。
  • 課程設計指導——如何應用Java反射技術靈活地創建程序類對象實例
    軟體項目實訓及課程設計指導——如何應用Java反射技術靈活地創建程序類的對象實例1、如何應用屬性配置文件實現對系統中的配置信息進行讀寫操作Java中的屬性配置文件主要可以作為軟體應用系統及項目的配置文件,比如許多J2EE的開源框架系統中都提供了屬性配置文件作為該應用框架的對外配置文件
  • 如何保證軟體應用系統架構設計結果的可擴展性和可重用性(上篇)
    軟體項目實訓及課程設計指導——如何保證軟體應用系統架構設計結果的可擴展性和可重用性(上篇)1、良好的可重用性軟體系統架構設計結果的主要體現可重用性的軟體應用系統的系統架構設計結果主要體現在如下兩個方面——本項目的系統架構設計的結果是可重用的和在本項目的系統架構設計中重用成熟的系統架構設計方案
  • 如何在Web應用系統表示層開發實現中應用Velocity模板技術
    軟體項目實訓及課程設計指導——如何在Web應用系統表示層開發實現中應用Velocity模板技術1、分離Web表示層的數據處理和展現邏輯的常見的應用技術分離Web表示層的數據處理和展現邏輯是目前企業級的Web應用系統開發中表現層組件開發實現中的基本實現目標。
  • 如何應用EhCache緩存框架提高J2EE Web應用系統持久層的響應性能
    軟體項目實訓及課程設計指導——如何應用EhCache緩存框架提高應用系統持久層響應性能1、在Web應用系統中應用持久層相關的緩存框架在Java應用程式開發實現和J2EE Web應用系統的設計和開發實現中,軟體應用系統的設計和開發實現人員可以在系統的表示層和系統的持久層中充分地應用緩存機制和相應實現技術能夠大大地提高
  • 使用Java API在Jedis中實現DAO設計模式
    在本文中,我們將學習Jedis Java客戶端中的DAO設計模式和實現。DAO模式被實現為客戶端應用程式和資料庫之間的一層。客戶端應用程式不必依賴基礎資料庫交互API(低級)。Redis資料庫中存儲的數據被建模為Domain對象(POJO類),它將僅具有getter和setter方法,客戶端應用程式僅知道域對象和高級API。
  • 如何在系統架構設計中應用面向切面的設計思想分離橫切關注點
    軟體項目實訓及課程設計指導——如何在系統架構設計中應用面向切面的設計思想分離橫切關注點1、什麼是面向切面編程AOP(Aspect Oriented Programming)技術軟體應用系統中的「橫切問題」( 切面問題)主要是指如何實現對軟體應用系統中的如下典型問題的技術實現:事務、安全、日誌、並發鎖等橫切關注。因為,當軟體應用系統變得越來越複雜,其中的這些橫切關注點等方面的技術問題如何有效地得以解決,並成為一個比較棘手的問題時,面向切面編程AOP的相關技術就可以很輕鬆地解決軟體應用系統中橫切關注點這些棘手問題。