常用的資料訪問方式

來源:互聯網
上載者:User

我瞭解的常用的資料庫訪問方式(.Net環境)有以下幾種:

1, 直接使用.Net提供的各種DataAdapter或DataReader

2, 使用資料訪問控制項(各種DataSource控制項)

3, 自己寫的訪問類(一般指的是自己封裝後的DataAdapter或DataReader)

4, 使用ORM架構

當然以上並不是包含所有的資料訪問方式,但是常用的也就這幾種。

資料訪問的方式的選擇很大一部分是依賴於構架的設計,相互之間也不一定是互斥的關係。比如說第二、三、四種方式其實都依賴於第一種,但是在某一定程度上作了封裝。而且各種訪問方式不一定有誰好誰壞的差別,更多的是適合於不適合。

下面詳細說說我對幾種資料訪問方式的看法。

第一, 直接使用.Net提供的各種DataAdapter或DataReader。

這種方式相信大家都會。每一本講.Net資料訪問的書中都會這樣告訴你:建立資料連線,建立Adpater或Command,開啟資料庫連接,執行資料訪問,關閉資料庫連接。這是ADO.Net的官方標準流程。

然而在實際生產中呢?

對每一個資料庫訪問都採用以上的過程嗎?都寫一大堆Try…Catch?連接字串放在哪兒?資料存取碼放在哪兒?怎麼實現資料來源的可替換性?怎麼測試?怎麼處理並發?如果需求變了怎麼辦?更重要的是,對於每一次資料訪問都要考慮以上問題嗎?

顯然,直接使用DataAdapter或DataReader不是一種良好的設計,要對以上過程在一定的程度上進行封裝和抽象。這樣也就有了以下幾種資料訪問方式。

第二, 用資料訪問控制項(各種DataSource控制項)

微軟為我們封裝的資料訪問控制項。主要特點是快!在Vs.Net開發環境中,從資料庫中拖一個資料表到WinForm或Web頁上,自動就會產生相應的資料訪問控制項,包括相應的Select、Update、Insert和Delete命令。

資料訪問控制項和Vs.Net的配合可以說是完美,兩者的結合把RAD發揮的淋漓盡致。基本上建立好資料庫,點幾下滑鼠,你就可以有一個能用的使用者介面了,甚至加上顯示控制項的AutoFormat功能,還能讓你的資料介面具備一定的觀賞性!所有的DataAdpater、DataReader、各種借口、容器、設計模式、構架、物件導向……統統忘了吧!甚至SQL語句你也可以不會!需要做的就是處理一個又一個的頁面,拖放一個又一個的控制項。當然有些複雜的東西還是需要稍作調整的,比如多表聯集查詢,不過也不要緊,DataSource還能結合Query Builder使用呢!好開心呀!

不過等等。當你吹著口哨,唱著小曲,身心愉悅的拖著控制項的時候,頭說了:某某需求變了,某某表也要變了。噢,天!我早就記不清那些控制項用到那個表了!一個個的檢查?我的WebSite裡面有幾十個aspx,上百個DataSource……。然後,當我剛剛改好,筋疲力盡的時候,頭又說了:客戶要求……,……,……,……。

如果從物件導向設計的角度分析一下的話,幾乎所有的代碼臭味都能用在這個系統上。簡直就是反面教材呀!

那難道說這種方式也被無情的拋棄了,也不盡然。快有快的好處,以下情況適合採用這種方式(或者說,以下情況適合RAD方式):

1, 原型系統:為了驗證客戶需求而編寫原型,幾乎不用考慮代碼演化的問題,作為客戶需求的說明和正式開發的參考為存在的。如果客戶提出了新的需求或需求發生了變化,就編寫新的原型系統。原型系統作為可編譯、可啟動並執行客戶需求而存檔。

2, 一次性的代碼(Write Once,Use Once):比如要求對資料庫進行一些硬性的修改或維護的時候。這些代碼執行了這一次操作之後,就失去了存在的價值。

3, 永遠不會變的系統:很好理解。問題是,這樣的系統,存在嗎?

4, 作業:老師布置的作業,通常的特點是:簡單、不會有大變化、注重結果、容易矇混過關(^^)。

第三, 自己寫的訪問類(一般指的是自己封裝後的DataAdapter或DataReader)

真真正正的物件導向的資料存取方法,看下面的圖:

商務邏輯定義資料訪問,DAL實現,有點類似於Adapter模式。商務邏輯和資料訪問進行了良好的解耦合,資料訪問層的實現依賴於商務邏輯,符合實現依賴於抽象的原則。

這種方法的好處很顯然:高度解耦合、容易更改、適合團隊開發。不過也不是沒有缺點,那就是工作量要大一些,特別是當業務實體的類型較多時,可能總要重複的實現SELECT、INSERT、UPDATE、DELETE等。不過既然商務邏輯不依賴於資料訪問,我們也完全可以變通一下,比如用代碼產生加手工修改的方式,結合強型別的編譯特點,修改起來還是比較方便的。

這種方法還有一個很重要的好處,解耦合的好處就是便於測試!進行測試時完全可以類比一個資料訪問層,單獨對商務邏輯進行測試,甚至可以類比各種資料庫錯誤的情況!同時亦可以單獨對資料訪問層進行測試!

這種方式如果需要更換資料庫的話,也是比較容易的,基本上一種資料庫的訪問可以封裝一個DLL,根據系統的情況,部署的時候修改一下設定就可以了!

對了事務、特別是分散式交易等要求,可以在“統一的資料訪問入口”這個位置實現。對於上層來說,是透明的。

這種方法是我最常用的方法,推薦!

第四, 使用ORM架構

這個就不說了吧?在園子裡搜一下,肯定一大堆,慢慢看吧!^^

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.