設(shè)計模式在業(yè)務(wù)邏輯層中的應(yīng)用
(4)DAO有助于提升系統(tǒng)的可移植性。DAO模式通過將數(shù)據(jù)訪問劃分為抽象層和實現(xiàn)層,分離數(shù)據(jù)使用和數(shù)據(jù)訪問的實現(xiàn)細節(jié)。這意味著業(yè)務(wù)層與數(shù)據(jù)訪問的底層細節(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模式的進一步改良。由于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為該示例的詳細類圖。
該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工廠負責(zé)產(chǎn)生DAO實例。兩者結(jié)合可更好地實現(xiàn)業(yè)務(wù)組件與持久層組件的解耦。業(yè)務(wù)組件只需獲取DAO工廠實例,然后由DAO工廠實例負責(zé)產(chǎn)生DAO組件。業(yè)務(wù)組件則面向DAO接口編程,無須關(guān)心DAO的具體實現(xiàn)。
5 結(jié)束語
分析傳統(tǒng)3層軟件體系結(jié)構(gòu)的優(yōu)缺點,從軟件模式角度出發(fā),對其進行改進,提出4層開發(fā)模型,提高了系統(tǒng)的可擴展性、可復(fù)用性、可維護性,并給出一個具體應(yīng)用實例實現(xiàn)DAO設(shè)計模式。
評論