常用的資料訪問方式

2021-09-22 06:40:49 字數 2525 閱讀 3962

我了解的常用的資料庫訪問方式(.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框架

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

Spring訪問資料的方式

訪問資料的方式,傳統的jdbc,spring封裝的資料庫連線池 datasource,dbcp,tomcat的jidn spring中的jdbctemplte org.springframework.jdbc.core 現在介紹一下,spring還可以結合其他工具運算元據庫。使用orm工具訪問資料庫...

8086定址方式(資料訪問方式)

累加器 ax 基址暫存器 bx bp 基址指標暫存器 計數器 cx 資料暫存器 dx 變址暫存器 si 源變址暫存器 di 目的變址暫存器 1 立即數定址方式 指令的運算元直接存放在機器 中,緊跟在操作碼之後 mov ax,1234h2 暫存器定址方式 指令的運算元存放在暫存器中 mov ax,12...

OpenCV常用訪問畫素的幾種方式

1.直接用at訪問 2.使用mat 模板子類過載 訪問,需要提前知道影象型別 cv mat img image img j,i cv vec3b 注意1 此處的 j,i 並不是座標,是訪問的第j行第i列的畫素。注意2 使用at方法訪問較慢,宜用於隨機訪問,而非迴圈。得到第j行畫素首位址的指標 for...