Java分層設計-DAO設計模式

主要內容

  • 分層設計的原理
  • 數據訪問層。
  • 業務層

針對每個標題,重點介紹了本層開發標準和設計模式,簡單介紹了開發規範和一些原理

簡述

DAO是數據訪問對象的簡稱(Data Access Object),是數據訪問層(也可以稱爲數據層)的一種對象。實際開發中,可以將項目分層爲顯示層,控制層,業務層,數據訪問層,數據庫。
通常來看,我們要做一個項目,比如說一個客戶端,我們想要什麼樣的外觀,這是顯示層要解決的問題,我們想要實現什麼樣的功能,這是業務層要解決的問題,也就是業務層要提供的業務服務。
業務層在實現相應的功能的時候,需要訪問數據庫,而訪問數據庫無非就是基於增刪改查等這些原子操作,因而數據訪問層實際上是面向數據庫的增刪改查操作而設計的,業務層通過調用數據訪問層提供的服務實現業務處理。
數據訪問層實際上就是對業務層的業務邏輯的一種再分解。我通常理解爲,數據訪問層實際上就是用Java語句來執行SQL語句的。對於數據的存儲,數據庫中使用數據表,在程序中要使用對象,對象是對數據庫中數據表的一種建模,對象名一定要與數據庫中數據表的名稱一致,這些對象就是簡單Java類(JavaBean),通過這些簡單Java類來存儲和運輸數據。
顯示層要使用一些UI元素來展示數據或者提供用戶進行操作,而顯示層實現一些功能的時候就要依賴於控制層對業務層的調用。
在項目準備的時候,我們需要提前定義好數據庫連接的工具類。數據庫的打開和關閉在業務層實現比較合理,因此數據層的數據訪問對象只需要進行定義數據庫操作,而不需要負責資源的打開和關閉。業務層也只是調用數據庫工具類提供的方法而已,嚴格來說,數據庫工具類應該單獨的作爲一個工具包進行設計和開發。
在這裏插入圖片描述

接口

  • 接口首先定義了本層的開發標準。然後依據已經定義好的標準進行開發。
  • 接口方便獨立的層之間服務的調用。兩個獨立的層之間進行服務,必須依賴一定的標準,比如數據層和數據庫之間的JDBC。

數據訪問層

開發數據訪問層標準:
在開發數據訪問層的時候,首先開發數據訪問層接口,提供數據訪問層開發的標準。命名方式嚴格使用xxxDao。數據層執行的只是原子性的操作,對數據的增刪改查,和一些統計性的描述。接口開發時注意異常分析,對參數的註釋、對方法和屬性的註釋,對異常的註釋。

設計模式:
外層需要調用服務,而不需要知道子類的具體設計,使用工廠模式。
工廠類提供特定的方法,每個方法提供特定的DAO對象,外層得到了特定的DAO對象的時候就能夠調用本層提供的服務。這樣就增加了不同層之間的獨立性。在業務層需要使用數據訪問層的服務的時候,只需要將注意力放在工廠類上即可,從工廠類中獲得指定的數據訪問對象。

數據層操作標準:
對於數據層操作的接口的開發,注意命名標準,嚴格使用如下命名方式。
數據更新:doXxx()。doCreate(),doUpdate(),doRemove()
數據查詢:包括兩種查詢,
1、查詢數據表中的數據:findXxx()。findByID(),findByName()
2、查詢數據表中的統計信息:getXxx()。getAllCount()
在設計接口的時候,要寫清楚屬性和方法的註釋。需要考慮會拋出什麼異常,分析sql相關異常。異常處理:一步步的往上拋出。

簡單Java類的開發規範:

  • 考慮到日後有可能出現分佈式的應用,所以簡單java類必須實現java.Serializable接口
  • 簡單Java類名稱與表名稱一致
  • 類中的屬性不允許使用基本數據類型,必須使用基本數據類型對應的包裝類,爲了使用null
  • 類中至少有一個無參構造方法
  • 對數據庫中的每個實體表都要寫簡單Java類

業務層

開發業務層標準:
在開發業務層的時候,首先開發業務層接口,提供業務層開發的標準。命名方式建議xxxService。業務層進行的是更爲複雜的增刪改查,或者說是更爲複雜的功能的實現。而數據層執行的只是原子性的操作。同樣的,接口開發時注意異常分析,對參數的註釋、對方法和屬性的註釋,對異常的註釋。

設計模式:
同樣的,業務層也提供實現一個工廠類,該工廠類夠提供業務處理對象,這樣就實現了通過該工廠類向外層提供服務。不同層之間的服務調用依靠工廠類和接口,不需要知道具體的子類實現,這樣來看,控制層不需要知道數據庫的連接和關閉。

業務層開發規範:

  • 業務層儘量使用基本類型,而數據層儘量使用包裝類型。
  • 業務層必須知道數據層的方法,而不需要知道具體的實現。在開發的業務層的時候,最好熟悉數據層的方法,方便調用服務。
  • 業務層實現類的核心功能是:負責數據庫的打開和關閉,取得數據訪問對象,使用數據訪問對象提供的服務完成功能的設計。
  • 業務層處理業務的時候,無論是否有異常都需要進行數據庫的關閉。這就要使用try-catch-finally。(可以在開發業務層接口(抽象類)????的時候就提供部分代碼。)

業務層的兩類:

  • 前臺業務:給前臺開發
  • 後臺業務:給後臺管理員

工廠類

工廠類更像是一個工具箱,將本層所有的工具集成在一個類中,對外提供工具的獲取方式,在使用工具的時候只需要關注工廠類就可以了。這是非常符合我們的習慣的,我們通常關注的是工具的獲取和使用而不是工具的具體實現。

業務測試

在test子包中進行測試。
明確這裏的測試對象,這裏主要是對業務進行測試,因此使用的主要就是業務層工廠類。可以使用Junit進行測試。
對業務層提供的每個業務分別創建測試對象進行測試。實際上業務層提供的業務與我們的功能需求是相對應的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章