如何合理地設計軟體應用系統中數據訪問服務層內的各個功能程序類

2020-12-04 楊教授工作室

軟體項目實訓及課程設計指導——如何合理地設計數據訪問服務層中的各個功能程序類

作者已經在本系列文章《軟體項目實訓及課程設計指導--如何正確地設計J2EE應用系統持久層中的各個組件結構及關係》中為讀者介紹了為什麼要設計和應用數據訪問服務接口的目的及如何設計該接口以真正達到利用數據訪問服務層組件隔離業務處理邏輯和數據訪問操作邏輯的應用效果。

作者將在本文為讀者介紹如何合理地設計數據訪問服務層中的各個程序類,包括程序類的結構及與持久層中的DAO組件和上層業務層內的業務組件之間的關係。

1、應用「門面設計模式」倡導的程序結構關係編程實現數據訪問服務組件

利用基於門面設計模式實現的數據訪問服務組件隔離軟體應用系統中業務處理邏輯和數據訪問操作邏輯,在各個業務邏輯處理組件中只需要與數據訪問服務組件進行交互,而不再需要與不同的DAO組件進行具體的交互。

這樣的設計方案可以降低整個軟體應用系統中的業務邏輯處理層和系統持久層中的數據訪問組件之間的藕合度,將使得軟體應用系統業務層組件的可重用性得到進一步地提高。

下圖所示為實現這樣的設計目標的UML類圖示例,在具體的編程實現中,應該要保證各個業務處理類只與數據訪問服務組件接口進行關聯,而在數據訪問服務接口實現組件中也應該只與各個數據訪問接口發現關聯——依賴倒置思想的具體應用。

在上述示例圖中的「數據訪問服務組件接口」及相關的實現類基於門面設計模式的設計思想而設計,考慮到本文章的篇幅有限,至於什麼是門面設計模式及如何編程實現門面設計模式、門面設計模式的編程原則和代碼實現示例等方面的詳細內容請讀者閱讀作者的《J2EE項目實訓——UML及設計模式》一書中的第7章「架構設計中的架構模式」章節中的有關內容。

2、正確地編程實現數據訪問服務組件和各個數據訪問組件之間關係的示例程序代碼

(1)首先,設計和實現數據訪問服務接口

如下為示例項目銀行帳戶信息管理系統項目中的數據訪問服務接口中部分方法的定義代碼示例,其中的selectAllAccountInfo()方法提供查詢返回某個用戶的所有帳戶信息,考慮到本文章的篇幅,數據訪問服務接口中的其它方法的定義在此省略。

package com.bluedream.webbank.service;

import java.util.ArrayList;

import com. bluedream.webbank.exception.WebBankException;

import com. bluedream.webbank.model.vo.AccountInfoVO;

public interface AccountDAOServiceInterface {

public ArrayList<AccountInfoVO> selectAllAccountInfo()

throws WebBankException;

// ... 其它方法的定義在此省略

}

(2)其次,再設計和實現數據訪問服務接口的具體功能實現類,為數據訪問服務接口中所定義的各個功能服務方法提供最終的功能實現。

如下為示例項目銀行帳戶信息管理系統項目中的數據訪問服務接口的具體功能實現類代碼示例,考慮到本文章的篇幅,方法內的具體功能實現細節的程序代碼在此省略沒有附錄。

package com. bluedream.webbank.service;

import java.util.ArrayList;

import com. bluedream.webbank.exception.WebBankException;

import com. bluedream.webbank.model.vo.AccountInfoVO;

public class AccountDAOServiceImple implements AccountDAOServiceInterface {

private AccountManageDAOInterfaceoneAccountManageDAOJDBCImple=null;

public ArrayList<AccountInfoVO> selectAllAccountInfo()

throws WebBankException{

// ... 具體的功能實現代碼在此省略

}

// ... 其他方法的功能實現代碼在此省略

}

(3)最後,正確地編程實現數據訪問服務實現組件類和各個數據訪問組件類之間的關係

在上述示例所示的數據訪問服務接口的具體功能實現類(AccountDAOServiceImple)代碼示例中通過包含數據訪問組件接口對象而實現數據訪問服務組件和各個數據訪問組件之間的關係(請見上述示例代碼中黑體所示的oneAccountManageDAOJDBCImple對象的定義代碼)——遵守「優先應用類之間的組合關係,少用程序類之間的繼承關係」的設計原則。

基於上面的設計原則,讀者在以後的軟體應用系統項目開發實現中不應該採用下面示例所示的繼承某個數據訪問組件的實現類的設計方案(請見下面程序代碼示例中黑體所示的代碼public class AccountDAOServiceImple extends AccountDAOServiceImple),因為面向對象OOP程序設計方法中的繼承關係會導致子類緊密依賴於其上層的基類。如下為採用繼承機制實現的代碼示例。

package com. bluedream.webbank.service;

import java.util.ArrayList;

import com. bluedream.webbank.exception.WebBankException;

import com. bluedream.webbank.model.vo.AccountInfoVO;

public class AccountDAOServiceImple extends AccountDAOServiceImple

implements AccountDAOServiceInterface {

public ArrayList<AccountInfoVO> selectAllAccountInfo()

throws WebBankException{

// ... 具體的功能實現代碼在此省略

}

// ... 其他方法的功能實現代碼在此省略

}

讀者可以通過上述兩種功能相同但採用不同設計風格編程實現的程序代碼示例,深刻領悟程序類關係設計中所倡導的「優先應用組合、儘量少用繼承」的設計原則。此設計原則大量地應用在GOF的23種設計模式中。

3、對各個數據訪問服務組件的實現代碼進一步重構——「找出共性,分離個性」

在軟體應用系統中的各個數據訪問服務組件中包含有類似功能實現的數據訪問邏輯是一種很常見的現象,軟體應用系統的開發人員此時應該要對軟體應用系統中的各個數據訪問服務組件的功能實現代碼進一步重構(reFactor)——「找出共性,分離個性」以減少程序代碼的重複度。

如下示圖為MyEclipse開發工具中所提供的程序代碼重構的功能菜單,MyEclipse開發工具全面地支持Martin Fowler在他的經典名著《重構:改善既有代碼的設計》(英文書名: Refactoring: Improving the Design of Existing Code)一書中所倡導代碼重構功能。

當然,軟體應用系統的開發人員還應該仔細地思考下面的有關問題:

1)怎樣合理地抽象出共性的數據訪問邏輯?

2)怎樣處理數據訪問服務層中的各個方法之間的相互調用?

3)怎樣處理數據訪問服務層中的各個服務方法的事務?

為此,在程序設計方面,開發人員應該將「共性」的數據訪問服務邏輯的程序代碼封裝到一個數據訪問服務基類中,而將「個性化」的數據訪問服務實現代碼放在對應的子類中。因為面向對象OOP程序設計方法中的「繼承與派生」是分離事物的「共性」和「個性」的常用設計手段。

下圖所示為體現該設計思想的UML類圖的示例圖,各個數據訪問服務子接口的實現類一方面實現各自的接口定義中的功能方法——它們代表「個性」的數據訪問服務邏輯的實現代碼,另一方面也繼承數據訪問服務基接口的實現類,這樣將可以在各個數據訪問服務子接口的實現類中重用數據訪問服務基接口實現類中的各個功能方法——它們代表「共性」的數據訪問服務邏輯的實現代碼。

下面的幾個程序代碼示例中的各個接口定義及有關的實現類的代碼體現了上述這樣的設計思想,為了減少本文章的篇幅,除掉了無關的方法定義和方法的功能實現代碼沒有附錄。

1)數據訪問服務基接口的程序代碼示例,在該接口中定義「共性」的數據訪問服務邏輯

package com.bluedream.daoService;

public interface BaseDAOService{

public void baseDAOServiceMethod();

}

2)數據訪問服務基接口的具體實現類的程序代碼示例,在該程序類中最終完成「共性」的數據訪問服務邏輯的功能實現

package com.bluedream.daoService;

public class BaseDAOServiceImle implements BaseDAOService{

public BaseDAOServiceImle() {

}

public void baseDAOServiceMethod() {

}

}

3)數據訪問服務基接口的某個子接口的程序代碼示例,在該接口中定義「個性」的數據訪問服務邏輯以滿足特定的應用功能

package com.bluedream.daoService;

public interface BaseDAOServiceDerivedInterface extends BaseDAOService{

public void derivedDAOServiceMethod();

}

4)數據訪問服務子接口的實現類代碼示例,在該程序類中最終完成「個性」的數據訪問服務邏輯的功能實現

package com.bluedream.daoService;

public class BaseDAOServiceDerivedInterfaceImple extends BaseDAOServiceImle

Implements BaseDAOServiceDerivedInterface {

public BaseDAOServiceDerivedInterfaceImple() {

}

public void derivedDAOServiceMethod() {

}

}

相關焦點

  • 如何應用數據訪問服務層分離系統中的業務層和持久層之間耦合關係
    軟體項目實訓及課程設計指導——如何應用數據訪問服務層分離業務層和持久層之間耦合關係作者已經在本系列文章《軟體項目實訓及課程設計指導--如何正確地設計J2EE應用系統持久層中的各個組件結構及關係》中為讀者介紹了為什麼要設計和應用數據訪問服務接口的目的及如何設計該接口以真正達到利用數據訪問服務層組件隔離業務處理邏輯和數據訪問操作邏輯的應用效果
  • 在軟體系統設計中如何降低軟體系統中程序類之間耦合關係(上篇)
    軟體項目實訓及課程設計指導——如何降低軟體系統中程序類之間耦合關係(上篇)1、分離軟體應用系統中各個模塊類的接口定義和對應接口的具體功能實現面向對象程序類設計的五大原則中的「開放-封閉原則」 ( OCP,Open-Close Principle)倡導分離接口的定義和接口的具體功能實現的設計原則
  • 項目實訓及課程設計——如何合理地設計軟體應用系統的Web表示層
    軟體項目實訓及課程設計指導——如何合理地設計軟體應用系統的Web表示層1、用戶界面是軟體應用系統的門面,在設計和開發實現時必須高度重視軟體應用系統表示層內的各個組件是軟體應用系統的前端界面組件,它們直接與應用該軟體應用系統的最終操作者發生各種人機互動行為。
  • 如何正確地應用Web MVC架構模式分離表示層和模型處理層耦合關係
    軟體項目實訓及課程設計指導——如何正確地應用Web MVC架構模式分離表示層和模型處理層耦合關係1、MVC體系架構設計模式是用來幫助系統設計人員控制「變化」的一種設計模式MVC體系架構設計模式是上世紀80年代在Smalltalk-80中出現的一種軟體設計模式
  • 如何在基於面向服務架構設計的項目中應用WebService技術(上篇)
    軟體項目實訓及課程設計指導——如何在基於面向服務系統架構設計的項目中應用Web Service技術(上篇)1、了解軟體系統開發人員所能夠獲得的各種層次的功能服務及所存在的問題(1)計算機作業系統中所提供的「Service」(服務)
  • Android應用程式設計原理及天氣實況預報系統的具體實現
    但是,並不是每一個Android 應用程式都需要這四種功能組件,而是使用上述四種功能組件的某些組合。Activities是最基本的Android 應用程式組件。在應用程式中,一個Activities通常就是一個單獨的屏幕,大多數應用由多個屏幕顯示組成。
  • 基於Qt環境下物理實驗數據處理系統的設計與實現
    可適應麥可遜於涉儀實驗數據處理需求,可運行於windows 98、windows 7、Unix等不同平臺,方便各個不同系統地移植使用。其兼容逐差法、最小二乘法等多種不同算法。界面美觀,設計合理,提供了一個通用型實驗數據處理平臺。
  • 單片機應用系統的可靠性設計
    單片機應用系統是當前最典型、最廣泛的現代電子系統。 現代電子系統的可靠性表現為,在規定條件下,系統準確無誤運行的能力.突出了可靠性的軟體和運行中的失誤概率。 可靠性設計則是在產品開發過程中,保證運行可靠的全部設計手段,甚至包括了產品出廠後軟體升級中的可靠性設計。
  • 程序設計課程體系的維度與層次劃分及其教學實踐
    由於程序設計能力是計算機專業學生的核心能力,因此如何改進教學,高效地培養學生的程序設計能力一直是一個具有重大研究意義的課題[1]。目前大多數教學研究都是對教學方法、教學手段進行改革,但對課程體系結構、培養目標層次這類教學改革的基礎性問題研究較少[2-4]。
  • 「鑑貞服務」測試伴侶忠誠度不可怕,這些間諜軟體更難防
    Lipizzan的「間諜軟體」偽裝成具備清理功能、備份功能的應用程式來吸引用戶下載安裝,並在後臺偷偷連接伺服器,竊取用戶的電子郵件、簡訊、位置信息以及屏幕截圖等隱私數據。目前在谷歌應用商店中發現有的 20 多款應用屬於 Lipizzan 家族,感染用戶為國外小部分用戶,國內用戶並未受到波及。
  • 什麼是API(應用程式編程接口)?
    雖然你可能不知道 - 你現在正從API中受益。您正在瀏覽器中閱讀這篇文章。目前,瀏覽器正在通過API獲取信件。這允許它向你展示這篇文章。此外,你可能知道大多數在線服務都帶有自己的API,這可能讓你不知道 - API究竟是什麼?如果按照PC Mag的定義,這個術語是應用程式編程接口的縮寫 - 但這並不能解釋任何事情。
  • 如何設計紅外入侵檢測監控報警系統
    如何設計紅外入侵檢測監控報警系統 電子設計 發表於 2018-11-02 09:30:00 隨著電子和通信技術的不斷發展,單片機已經在數據壓縮採集、電子設備
  • 免費應用程式如何賺錢?
    在本文中,我們將介紹著名的免費產品如何從其應用程式中賺錢,為如何選擇應用程式獲利策略提供建議,並檢查要集成的軟體工具。 5.贊助模式 獲得贊助是遵循免費軟體賺錢的有利模式。 此模型通常可用於已經具有普通用戶的開發應用程式。 具有特定市場利基的應用程式可以獲得最大的收益。 因此,您可以聯繫同一行業的贊助商,以使其品牌與廣告,應用程式中的信息相匹配,或使應用程式設計適應該品牌。
  • 什麼才是真正的架構設計?
    我在這重新定義架構:軟體架構指軟體系統的頂層結構。架構是經過系統性地思考, 權衡利弊之後在現有資源約束下的最合理決策, 最終明確的系統骨架: 包括子系統, 模塊, 組件. 以及他們之間協作關係, 約束規範, 指導原則.並由它來指導團隊中的每個人思想層面上的一致。涉及四方面:系統性思考的合理決策:比如技術選型、解決方案等。
  • C/S及B/S結構在校園一卡通系統中的應用
    C/S結構主要優點在於系統的客戶應用程式和伺服器構件分別在不同的計算機上,系統中每臺伺服器都可以適合構件的要求,這對於硬體和軟體的變化顯示出極大的適應性和靈活性,且易於對系統進行擴充和縮小。但隨著企業規模的日益擴大,軟體的複雜程序不斷提高,傳統二層C/S結構存在一些局限性,如軟、硬體的組合及集成能力有限、客戶機負荷太重、數據安全性不夠好等,提出了三層C/S結構。
  • 消費類音頻應用的解決方案
    最重要的是優點,這類解決方案可以提供以下的功能:  ⊙單處理器架構的高度集成的SOC解決方案  ⊙減少整個SOC設計和製造過程的成本  ⊙可編程音頻處理器可以延長SOC設計的生命周期  ⊙快速投放市場的優勢  ⊙MIPS的軟音頻接口有利於應用軟體的開發和集成  多內核SOC音頻架構
  • 數字視頻集成管理系統的功能特點及應用優勢
    一、系統架構 數字視頻集成管理平臺按照功能可分為系統接入層、系統應用層、用戶接入層,通過中心平臺進行業務和數據的融合,實現一個技術先進的軟體平臺。主要包括了以下幾個子系統: 閉路電視監控系統是安全技術防範體系中的一個重要組成部分,是一種先進的、防範能力極強的綜合系統,它可以提供某些重要區域近距離的觀察、監視和控制,能在人們無法直接觀察的場合,卻能實時、形象、真實地反映被監視控制對象的畫面,並已成為人們在現代化管理中監控的一種極為有效的觀察工具。
  • Hadoop大數據生態系統及常用組件簡介
    HDFS具有高容錯性、適合批處理、適合大數據處理、可構建在廉價機器上等優點,缺點是低延遲數據訪問、小文件存取、並發寫入、文件隨機修改。         Hadoop MapReduce是一個軟體框架,基於該框架能夠容易地編寫應用程式,這些應用程式能夠運行在由上千個商用機器組成的大集群上,並以一種可靠的,具有容錯能力的方式並行地處理上TB級別的海量數據集。
  • 採用google地圖的Android系統導航應用設計
    四、GPS 定位功能實現  全球衛星定位系統(Global Positioning System,GPS)是一個中距離圓型軌道衛星導航系統,它可以為地球表面超98%的地區提供準確的定位、測速和高精度的時間標準服務,在各個領域都有廣泛的應用。
  • 太陽能電站遠程監控系統的設計
    1.4 結構化設計語言VB具有豐富數據類型是種符合結構化設計思想語言。1.5 強大資料庫訪問功能VB利用數據Control控制項可以訪問多種資料庫,可以用最少代碼實現資料庫操作和控制。1.6 支持對象連結和嵌入技術VB核心是對對象連結和嵌入(OLE)技術支持,利用OLE技術能夠開發集聲音、圖像、動畫、字處理、Web等對象於一體的功能強大的軟體。1.7 網絡功能VB提供了DltTML設計工具,利用這種技術可以動態創建和編輯Web頁面使用戶在VB中開發多功能網絡應用軟體。