999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于外觀模式的數據庫訪問層的設計與實現

2008-12-31 00:00:00
電腦知識與技術 2008年23期

摘要:外觀模式是一種使用普遍的設計模式。利用它設計的中間件,擁有使用方便,理解容易等特點。文章利用外觀模式對系統中的數據庫訪問層進行設計,并利用C#語言實現其功能。

關鍵詞:設計模式;外觀模式;數據庫訪問層

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)23-849-03

Design and Realization of Database Access Layer Based on Facade Pattern

LI Dan

(School of Software, HuaZhong University of Science and Technology, Wuhan 430000, China)

Abstract: The Facade Pattern, a kind of Design Patterns, is widely used. The Midware designed with the Facade Pattern is easy to understand and be used. We design the Database Access Layer with the Facade Pattern and try to realize it with C#.

Key words: Design Pattern; Facade Pattern; Database Access Layer

1 引言

Christopher Alexander說過:“每一個模式描述了一個在我們周圍不斷重復發生的問題,以及該問題的解決方案的核心。這樣,你就能一次又一次地使用該方案而不必做重復勞動” [1]。設計模式使人們可以更加簡單方便地復用成功的設計和體系結構。它可以幫助你做出有利于系統復用的選擇,同時提高系統的可維護性[2]。

2 設計模式介紹

隨著設計模式越來越流行,這個領域的研究和文獻越來越多起來,出現了一些比較權威的設計模式研究成果和文獻。在The Smalltalk Companion這本設計模式的權威書籍中給出了設計模式的一個定義:“設計模式是對讀者經常遇到的設計問題的再現方案” [1]。一般而言,一個模式由四個基本要素構成。

1)模式名稱(pattern name):一個助記名,它用一兩個詞來描述模式的問題、解決方案和效果。命名一個新的模式增加了我們的設計詞匯,設計模式允許我們在較高的抽象層次上進行設計,基于一個模式詞匯表,我們自己以及同事之間就可以討論模式并在編寫文檔時使用它們,模式名可以幫助我們思考,便于我們與其他人交流設計思想及設計結果,找到恰當的模式名也是我們設計模式編目工作的難點之一。

2)問題(problem):描述了應該在何時使用模式,它解釋了設計問題和問題存在的前因后果,它可能描述了特定的設計問題,如怎樣用對象表示算法等。也可能描述了導致不靈活設計的類或對象結構。有時候,問題部分會包括使用模式必須滿足的一系列先決條件。

3)解決方案(solution):描述了設計的組成成分,它們之間的相互關系及各自的職責和協作方式,因為模式就像一個模板,可應用于多種不同場合,所以解決方案并不描述一個特定而具體的設計或實現,而是提供設計問題的抽象描述和怎樣用一個具有一般意義的元素組合(類或對象組合)來解決這個問題。

4)效果(consequences):描述了模式應用的效果及使用模式應權衡的問題。盡管我們描述設計決策時,并不總提到模式效果,但它們對于評價設計選擇和理解使用模式的代價及好處具有重要意義。軟件效果大多關注對時間和空間的衡量,它們也表述了語言和實現問題,因為復用是面向對象設計的要素之一,所以模式效果包括它對系統的靈活性、擴充性或可移植性的影響,顯式地列出這些效果對理解和評價這些模式很有幫助。

3 外觀模式介紹

Facade是主要的設計模式之一,得到廣泛的應用。Facade為子系統中的一組方法提供一個一致的界面,這個界面就是“外觀”,這個被稱為“外觀”的接口使得這一子系統更加容易被使用和理解(圖1)。

3.1 外觀模式意圖

外觀模式定義了一個將子系統的一組接口集成在一起的高層接口,以提供一個一致的界面。通過這個界面,其他系統可以方便地調用子系統中的功能,而忽略子系統內部發生的變化。

3.2外觀模式使用場合

1)增強分層結構的邏輯性:在實現分層設計時,我們可以采用外觀模式封裝層次,從而可以清楚地劃分層次界面的歸屬。然后我們約定,必須通過外觀接口來訪問內部方法或對象的實例,這樣就保持了很清晰的層次結構。

2) 封裝現有系統:在做二次開發的時候,這時需要封裝現有的老系統,使之對外可用。這樣,我們的開發人員可以在不影響原先系統的功能的情況下開發新的系統,并且可以通過老系統的“外觀”接口使用其方法。

3)編寫可復用的中間件:作為一個可能被經常使用的模塊,可以把它設計成外觀模式,這樣在下一個相近的項目中,我們可以復用它。得益于外觀模式,這個模塊具有使用簡單,易于理解的特點。

4 基于外觀模式的數據庫訪問層

開發數據庫應用程序時,不免涉及到數據庫訪問層的設計。一個良好的數據庫訪問層應該有如下特點:1)易用性,控制層的開發人員只需掌握羅干方法或函數。2)可移植性,對于不同的數據庫平臺應該都可以適用。3)可理解性,邏輯清晰,便于閱讀和修改。而外觀模式恰恰具有以上特點[3]。

4.1 數據庫訪問層的設計

采用外觀模式設計數據庫訪問層,得到數據庫訪問層的類結構圖(圖2)。DbaseLayer是一個接口類,它就是文中提到的那個“外觀”,利用它封裝了下面比較復雜的數據訪問層的實現。AccessDataBaseLayer、SQLServerDataBaseLayer、OracleDataBaseLayer、DB2DataBaseLayer分別采用不同的數據庫連接字串與不同數據庫鏈接,而這些具體的實現controlLayer是不用知道的,它建立DbaseLayer的實例以后就只需通過SqlExecute方法得到數據集合了。

4.2 數據庫訪問層的實現

C#是一種強大的高級編程語言,由于它具有DataSet等數據庫工具類,編寫數據庫訪問層比較方便,效率較高。所以本文利用C#實現此數據庫訪問層,以下是部分代碼,包括外觀基類和ACCESS,ORACLE數據庫的連接類。

public abstract class DBaseLayer {//外觀基類

protected OleDbConnection conn;

private void openConnSelf()//打開連接

{if (conn.State == ConnectionState.Closed)

conn.Open ();}

private void closeConnSelf() //關閉連接

{if (conn.State == ConnectionState.Open )

conn.Close ();}

public DataTable SqlExecute(string sqlString)//執行sql查詢得到數據dataTeble

{ OleDbDataAdapter oleAdapter = new OleDbDataAdapter ();

DataSet dataSet = new DataSet ();

DataTable dataTable = 1;

try {

oleAdapter.SelectCommand = new OleDbCommand(sqlString, conn);

openConnSelf();

oleAdapter.Fill(dataSet, \"tempdata\");

dataTable = dataSet.Tables[0];

closeConnSelf();

return dataTable;}

catch (Exception ex) {

return 1;

}}

public void openConn(string connString) { //打開連接公共方法

conn = new OleDbConnection(connString);}}

public class AccessDatabaseLayer :DBaseLayer//ACCESS數據庫訪問實現

{public AccessDatabaseLayer(string dataBaseName,string passWord,string useId)

{ string connString = \"Provider=Microsoft.Jet.OLEDB.4.0;Password=\"+passWord

+\"; User ID=\"+useId+\";Data Source=\"+dataBaseName;

openConn(connString);}}

public class OracleDatabaseLayer:DBaseLayer//ORACLE數據庫訪問實現

{string connString;//

public OracleDatabaseLayer(string dataSource) {

connString = \"Provider=MSDAORA; Data Source=\"+dataSource

+\";Persist Security Info=False;Integrated Security=yes\";

openConn (connString);}}

4 結語

在開發數據庫訪問層時,使用外觀模式,使得系統能夠適用于不同種類的數據庫,并且由于控制層不需要了解其實現細節,使用起來方便簡單,從而增強了系統的復用性和可移植性。

參考文獻:

[1] Gamma E, Richard H, Johnson R. Design Patterns: Elements of Reusable Object-Oriented[M].Addison-Wesley,1995.

[2] 縐娟,田玉敏.軟件設計模式的選擇與實現[J].計算機工程,2004,30(10):79-81.

[3] 陳小平,宋健康,歐建雄.多層J2EE架構下的會話Facade模式[J].微型電腦應用,2002,18(12):28-30.

主站蜘蛛池模板: 夜夜操国产| 欧美区一区| 日韩高清中文字幕| 91精品国产一区自在线拍| 国产手机在线小视频免费观看| av在线无码浏览| 亚洲无线视频| 日韩人妻无码制服丝袜视频| 男女猛烈无遮挡午夜视频| 毛片三级在线观看| 精品综合久久久久久97| 日韩在线观看网站| 国产中文一区a级毛片视频 | 国产精品尤物铁牛tv | 亚洲国产精品无码AV| 欧美精品亚洲精品日韩专区va| 19国产精品麻豆免费观看| 亚洲精品制服丝袜二区| 国产精品无码制服丝袜| 亚洲欧美日韩中文字幕一区二区三区 | 四虎国产精品永久在线网址| 欧洲av毛片| 国产国产人在线成免费视频狼人色| 亚洲精品午夜无码电影网| 91探花在线观看国产最新| 永久免费av网站可以直接看的| 囯产av无码片毛片一级| 精品三级网站| 午夜激情婷婷| 成AV人片一区二区三区久久| 亚洲综合色婷婷中文字幕| 色亚洲成人| 亚洲成人免费在线| 亚洲免费福利视频| 久久久亚洲色| 亚洲色图在线观看| 日本免费a视频| 3344在线观看无码| 国产成人精品视频一区二区电影| 日本在线亚洲| 亚洲国产欧洲精品路线久久| 噜噜噜综合亚洲| 国产精品思思热在线| 91九色最新地址| 国产一区二区三区在线无码| 亚洲国内精品自在自线官| 亚洲国产精品无码AV| 国产午夜不卡| 国产香蕉一区二区在线网站| 无遮挡国产高潮视频免费观看| 国产在线自在拍91精品黑人| 毛片最新网址| 亚洲动漫h| 亚洲中文字幕无码mv| 99热这里只有精品国产99| 国产亚洲精| 午夜影院a级片| 国产福利免费在线观看| 国产va欧美va在线观看| 国产精品永久免费嫩草研究院| 免费国产小视频在线观看| 五月天丁香婷婷综合久久| 亚洲无码久久久久| 国产av无码日韩av无码网站| 久久综合色天堂av| 六月婷婷激情综合| 国模在线视频一区二区三区| 国产亚洲欧美在线中文bt天堂| 日韩黄色在线| 国产精品浪潮Av| 日本色综合网| 久久五月天综合| 毛片基地美国正在播放亚洲| 亚洲人成网站在线播放2019| 91精品啪在线观看国产60岁 | 欧美国产日韩在线观看| 在线色国产| 玖玖精品视频在线观看| 国产成人精品视频一区二区电影| 国产欧美日韩另类精彩视频| 日本成人精品视频| Jizz国产色系免费|