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精品国产福利| 婷婷六月在线| 久久久国产精品无码专区| 激情无码视频在线看| 国产网站一区二区三区| 欧美一级99在线观看国产| 在线观看亚洲人成网站| 国产永久在线观看| 中文字幕 91| 亚洲国产精品日韩av专区| 亚洲av无码久久无遮挡| 99九九成人免费视频精品| 久久香蕉国产线看精品| a级毛片在线免费观看| 久久人人97超碰人人澡爱香蕉| 亚洲一级色| a级毛片免费播放| 国产欧美日本在线观看| 97精品国产高清久久久久蜜芽 | 香蕉视频在线观看www| 亚洲成人黄色网址| 91色爱欧美精品www| 国产高清在线观看| 欧美一区精品| 亚洲国产日韩视频观看| 国产91高跟丝袜| 国产自产视频一区二区三区| 免费毛片a| 成人蜜桃网| 欧美成人二区| 国产激爽爽爽大片在线观看| 成色7777精品在线| 亚洲午夜福利精品无码不卡| 中文字幕在线看| 欧美在线精品怡红院| 久久香蕉国产线看观看式| 欧美精品v日韩精品v国产精品| 8090成人午夜精品| 成人在线不卡| 国产乱人伦AV在线A| 美女无遮挡被啪啪到高潮免费| 欧美成人精品高清在线下载| 国产三级精品三级在线观看| 毛片视频网址| 久久亚洲精少妇毛片午夜无码| 欧美日韩亚洲国产主播第一区| 亚洲男人的天堂久久香蕉网| 亚洲永久视频| 久久精品aⅴ无码中文字幕 | 婷婷色婷婷| 亚洲精品男人天堂| 亚洲国产午夜精华无码福利| AV不卡无码免费一区二区三区| 国产日韩欧美视频| 午夜精品久久久久久久无码软件| 亚洲日韩AV无码一区二区三区人 | 这里只有精品在线| 亚洲视频在线青青| 国产人成在线视频| 免费观看成人久久网免费观看| 国产色网站| 日韩毛片免费观看| 97精品伊人久久大香线蕉| 国产精品亚欧美一区二区三区| 久久一本精品久久久ー99| 成人国产免费| 啪啪免费视频一区二区| 国产欧美日本在线观看| 日韩专区欧美| 久久不卡国产精品无码| 日韩AV手机在线观看蜜芽| a毛片免费在线观看| 亚洲人成网站色7777| 麻豆AV网站免费进入| 久久香蕉欧美精品| 91麻豆精品视频| 国产青榴视频在线观看网站| 久久久久国产一级毛片高清板| 亚洲人成网址| 国产超薄肉色丝袜网站| 在线欧美一区|