《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計 > 設(shè)計應(yīng)用 > 設(shè)計模式在業(yè)務(wù)邏輯層中的應(yīng)用
設(shè)計模式在業(yè)務(wù)邏輯層中的應(yīng)用
摘要: 每一個模式描述一個在不斷重復(fù)發(fā)生的問題,以及該問題解決方案的核心,。這樣就能多次使用該方案而不必重復(fù)勞動,。設(shè)計模式是面向?qū)ο筌浖O(shè)計過程中記錄的知識和經(jīng)驗,用一系列類結(jié)構(gòu)和對象來具體描述其含義,。設(shè)計模式通過復(fù)用面向?qū)ο笤O(shè)計的解決方案,,從而更加簡單方便地復(fù)用成功的設(shè)計和體系結(jié)構(gòu),,將已證實的技術(shù)表述成設(shè)計模式也會使新系統(tǒng)開發(fā)者更加容易理解其設(shè)計思路。設(shè)計模式可幫助設(shè)計者做出有利于系統(tǒng)復(fù)用選擇,,避免損害系統(tǒng)復(fù)用性,,通過提供一個顯式類和對象作用關(guān)系及它們之間潛在聯(lián)系說明規(guī)范,設(shè)計模式甚至能夠提高已有系統(tǒng)的文檔管理和
Abstract:
Key words :

1 引言

傳統(tǒng)軟件應(yīng)用系統(tǒng)一般采用3層應(yīng)用框架,,業(yè)務(wù)邏輯層代碼中混雜各種數(shù)據(jù)庫" title="數(shù)據(jù)庫">數(shù)據(jù)庫調(diào)用語句,,嚴(yán)重影響系統(tǒng)的可擴展性、可復(fù)用性和可維護性,。

設(shè)計可復(fù)用的面向?qū)ο筌浖泻芏嚯y點,。如找到相關(guān)對象;以適當(dāng)?shù)牧6葘⑵錃w類,;定義類的接口和繼承層次,,建立對象之間的基本關(guān)系;要對現(xiàn)在的問題有針對性,,同時對將來的問題和需求也有足夠的通用性,;避免重復(fù)設(shè)計或盡可能少做重復(fù)設(shè)計等。

采用設(shè)計模式" title="設(shè)計模式">設(shè)計模式可有效解決這些難點,,從而簡單方便地復(fù)用成功的設(shè)計和體系結(jié)構(gòu),。通過采用設(shè)計模式,能大大提高系統(tǒng)的可擴展性,、可重用性和可維護性,,并能降低系統(tǒng)開發(fā)難度,提高開發(fā)效率,。設(shè)計模式已成為當(dāng)前乃至今后軟件工程研究領(lǐng)域的一大熱點,,并被認(rèn)為是繼OOP技術(shù)之后的又一重大突破。

首先簡要介紹設(shè)計模式,,然后分析傳統(tǒng)3層架構(gòu)開發(fā)模型的優(yōu)缺點,,充分考慮系統(tǒng)的可擴展性,可復(fù)用性,,可維護性,,從軟件設(shè)計模式角度提出改進(jìn)方法,并給出研究實例,。

2 設(shè)計模式

每一個模式描述一個在不斷重復(fù)發(fā)生的問題,,以及該問題解決方案的核心。這樣就能多次使用該方案而不必重復(fù)勞動,。設(shè)計模式是面向?qū)ο筌浖O(shè)計過程中記錄的知識和經(jīng)驗,,用一系列類結(jié)構(gòu)和對象來具體描述其含義。設(shè)計模式通過復(fù)用面向?qū)ο笤O(shè)計的解決方案,,從而更加簡單方便地復(fù)用成功的設(shè)計和體系結(jié)構(gòu),,將已證實的技術(shù)表述成設(shè)計模式也會使新系統(tǒng)開發(fā)者更加容易理解其設(shè)計思路,。設(shè)計模式可幫助設(shè)計者做出有利于系統(tǒng)復(fù)用選擇,避免損害系統(tǒng)復(fù)用性,,通過提供一個顯式類和對象作用關(guān)系及它們之間潛在聯(lián)系說明規(guī)范,,設(shè)計模式甚至能夠提高已有系統(tǒng)的文檔管理和系統(tǒng)維護的有效性。設(shè)計模式確定所包含的類和實例及其角色,、協(xié)作方式,、職責(zé)分配。通過刻畫部件靜態(tài)和動態(tài)結(jié)構(gòu)及其之間的合作關(guān)系,,設(shè)計模式成功應(yīng)用于解決商業(yè)數(shù)據(jù)處理,、電子通信、圖形用戶界面,、數(shù)據(jù)庫,、分布式通信軟件等軟件構(gòu)造中。

3 傳統(tǒng)的3層架構(gòu)開發(fā)模型

目前,,在Internet/Intranet環(huán)境中,,企業(yè)級的應(yīng)用軟件系統(tǒng)大多采用3層應(yīng)用框架:表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)層(圖1),。在這種層次結(jié)構(gòu)的軟件框架中,。每層為其上一層提供服務(wù)(服務(wù)提供者),并作為其下一層的客戶(服務(wù)消費者),,內(nèi)部的層只對相鄰的層可見,從而構(gòu)成一個具有可移植性,、可擴充性的兼容平臺,。
 


但也存在顯著的缺點:在開發(fā)多個應(yīng)用軟件系統(tǒng)的過程中,不同的應(yīng)用軟件系統(tǒng)之間耦合度不是很好,;層與層之間代碼混亂,;訪問數(shù)據(jù)庫的方式不同,如JDBC,, Hibernate或JDO,,因此,在各種數(shù)據(jù)庫之間移植就需修改很多地方,,業(yè)務(wù)邏輯層也需跟著修改,,不能采用一致的編程模型,系統(tǒng)的可復(fù)用性,、可維護性不是很理想,。

4 改進(jìn)的4層架構(gòu)開發(fā)模型

基于上述分析,為提高軟件的開發(fā)效率,,這里從設(shè)計模式角度出發(fā),,提出把業(yè)務(wù)邏輯層進(jìn)一步分出一層,,單獨形成一個數(shù)據(jù)接口層。數(shù)據(jù)接口層屏蔽各種底層數(shù)據(jù)庫之間的差異,,負(fù)責(zé)與底層數(shù)據(jù)庫之間的連接,。形成4層軟件體系結(jié)構(gòu)框架,從上到下依次是:表示層,、業(yè)務(wù)邏輯層,、數(shù)據(jù)接口層、數(shù)據(jù)層,,如圖2所示,。表示層是應(yīng)用軟件進(jìn)行人機交互的接口;業(yè)務(wù)邏輯層負(fù)責(zé)處理用戶的業(yè)務(wù)請求,;數(shù)據(jù)接口層負(fù)責(zé)與底層數(shù)據(jù)庫之間的交互,;數(shù)據(jù)層則負(fù)責(zé)存儲數(shù)據(jù)。

4.1 DAO" title="DAO">DAO設(shè)計模式

數(shù)據(jù)接口層采用數(shù)據(jù)訪問對象DAO(Data Access Ob-iect)模式,。該模式實際是Adapter模式和Bridge模式的混合體,,DAO對象提供數(shù)據(jù)庫訪問的基本操作,如增加,、刪除,、修改、查詢等,。 DAO層以面向?qū)ο蟮姆绞椒庋b數(shù)據(jù)庫操作,。DAO組件完全專注于數(shù)據(jù)訪問實現(xiàn),業(yè)務(wù)層代碼無須關(guān)心底層數(shù)據(jù)庫訪問的實現(xiàn),,從而降低了層之間的耦合,。

DAO設(shè)計模式的優(yōu)點:

(1)DAO模式抽象出數(shù)據(jù)訪問方式,業(yè)務(wù)邏輯層訪問數(shù)據(jù)源時完全感覺不到數(shù)據(jù)源的存在,。軟件工廠中有一條很重要的法則:一個對象對其他對象的了解越少越好,,了解越少就意味著依賴越少,可復(fù)用性越高,。

(2)DAO將數(shù)據(jù)訪問集中在獨立的一層,,因為所有的數(shù)據(jù)訪問都由DAO代理,這層獨立的DAO將數(shù)據(jù)訪問的實現(xiàn)和系統(tǒng)的其余部分剝離,,將數(shù)據(jù)訪問集中,,使得系統(tǒng)更具可維護性。

(3)DAO降低了業(yè)務(wù)邏輯層的復(fù)雜度,。DAO管理復(fù)雜的數(shù)據(jù)訪問,,從而簡化了業(yè)務(wù)邏輯層。所有與數(shù)據(jù)訪問的實現(xiàn)有關(guān)的代碼(例如SOL語言等)都不寫在業(yè)務(wù)邏輯層里,業(yè)務(wù)邏輯層可集中處理業(yè)務(wù)邏輯,,提高了代碼的可讀性和生產(chǎn)率,。

 (4)DAO有助于提升系統(tǒng)的可移植性。DAO模式通過將數(shù)據(jù)訪問劃分為抽象層和實現(xiàn)層,,分離數(shù)據(jù)使用和數(shù)據(jù)訪問的實現(xiàn)細(xì)節(jié),。這意味著業(yè)務(wù)層與數(shù)據(jù)訪問的底層細(xì)節(jié)無關(guān),也就是說,,可以在保持上層機構(gòu)不變的情況下,,通過切換底層實現(xiàn)來修改數(shù)據(jù)訪問的具體機制,提高了系統(tǒng)的可復(fù)用性,。

(5)DAO組件依賴于數(shù)據(jù)庫系統(tǒng),,提供數(shù)據(jù)庫訪問接口,只要數(shù)據(jù)庫沒有重構(gòu),,DAO層通常無須改寫,。DAO層透明地分離數(shù)據(jù)庫與業(yè)務(wù)邏輯層,業(yè)務(wù)邏輯層專注于業(yè)務(wù)邏輯的實現(xiàn),,而無須關(guān)心持久層訪問的實現(xiàn),。

(6)DAO模式的進(jìn)一步改良。由于DAO層已實現(xiàn)所有的數(shù)據(jù)訪問,,業(yè)務(wù)邏輯層只需調(diào)用DAO接口,,因此業(yè)務(wù)邏輯層要使用Facade模式包裝DAO。為實現(xiàn)跨數(shù)據(jù)庫平臺移植,,支持不同數(shù)據(jù)訪問機制之間的可配置切換,,需在DAO層引入Factorv模式、Proxy模式和Strategy模式,,則可方便地在不同數(shù)據(jù)存儲方式間切換,。然而,采用DAO模式,,系統(tǒng)在請求數(shù)據(jù)端和數(shù)據(jù)服務(wù)端之間增加一層,,增加了系統(tǒng)的復(fù)雜度,;新增加的一層需要額外的設(shè)計與實現(xiàn),,增加了工作量;還需引入工廠甚至抽象工廠,,增加了設(shè)計的復(fù)雜度,。總的來說,,DAO將數(shù)據(jù)持久層與業(yè)務(wù)邏輯層分離,,提高了軟件的可擴展性,可維護性和可復(fù)用性,。

4.2 DAO實現(xiàn)

DAO對象也是,。Java對象,,只是它們提供數(shù)據(jù)庫訪問的能力。數(shù)據(jù)庫的訪問可歸納為創(chuàng)建(Create),、查詢(Read),、更新(Update)、刪除(Delete)4種基本操作,,即常說的CRUD操作,。DAO模式通常與工廠模式一起使用,建議面向接口編程,,為每個DAO實現(xiàn)類編寫接口,,DAO調(diào)用者使用接口,而不是具體的實現(xiàn)類,。當(dāng)然,,DAO對象需要值對象來傳值,值對象就是普通的JavaBean,。以下是一個DAO的示例,。圖3為數(shù)據(jù)訪問對象設(shè)計模式的參與對象和它們之間的調(diào)用關(guān)系。圖4為該示例的詳細(xì)類圖,。

 

該DAO示例包含文件:DAO接口類,、DAO接口實現(xiàn)類、DaoFactory類,、PersonBean類,、DBConn類、Test類,。接口里定義 DAO對象必須提供方法,,PersonBean是一個普通的JavaBean,DAO對象的實現(xiàn)類為接口的全部方法提供實現(xiàn),。程序中還用到工具類 DBConn,,該工具類主要用于獲得數(shù)據(jù)庫連接,通過連接獲得Statement對象,,并提供釋放Statement對象,、關(guān)閉連接的方法。

程序?qū)BConn對象設(shè)計成單態(tài)模式,。至此,,完整的DAO實例編寫完成。程序主要提供3個組件:傳值的JavaBean類,,DAO對象的接口,,DAO對象的實現(xiàn)類,實現(xiàn)類包括所用的工具類。DAO模式通常與工廠模式相結(jié)合,,DAO工廠負(fù)責(zé)產(chǎn)生DAO實例,。兩者結(jié)合可更好地實現(xiàn)業(yè)務(wù)組件與持久層組件的解耦。業(yè)務(wù)組件只需獲取DAO工廠實例,,然后由DAO工廠實例負(fù)責(zé)產(chǎn)生DAO組件,。業(yè)務(wù)組件則面向DAO接口編程,無須關(guān)心DAO的具體實現(xiàn),。

5 結(jié)束語

分析傳統(tǒng)3層軟件體系結(jié)構(gòu)的優(yōu)缺點,,從軟件模式角度出發(fā),對其進(jìn)行改進(jìn),,提出4層開發(fā)模型,,提高了系統(tǒng)的可擴展性、可復(fù)用性,、可維護性,,并給出一個具體應(yīng)用實例實現(xiàn)DAO設(shè)計模式。
 

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。