資料訪問層基礎結構設計
資料訪問層基礎結構設計目標:
1.完成物件導向的資料訪問
2.減少呼叫側程式碼量
3.滿足可擴充套件的系統需求
4.保證資料一致性
其中,對於訪問層基礎結構設計,採用如下原則。
1.對於物件導向系統,採用DataReader方式進行資料讀取;
2.為了減少呼叫側程式碼量和滿足可擴充套件的系統需求,採用反射實現動態的屬性訪問;
作者參與系統使用Codeplex的專案FastReflection作為反射工具,對於物件基本屬性可通過屬性名字串直接訪問,
例,Teacher類有屬性ClassID,我們可通過teacher.Item("ClassID")對其進行讀寫;
很多人擔心反射的效率問題,當然自己每次生成屬性訪問器可達到只有4倍的效率低下,而直接使用FastReflection可能會達到近40倍的效率低下;但1000000次讀寫在0.7秒內完成與可擴充套件的目標權衡起來,還是可以採用的。
3.為了保證資料的一致性,我們採用每個資料表都有物理主鍵ID,型別為GUID的設計;同時使用DateTime型UpdDateTime欄位來記錄插入和更新時間,作為排他的基本條件。
如何保證資料排他:
使用者A和使用者B同時取得一條資料進行更新的同時,使用UpdDateTime作為條件,如果UpdDateTime一致則可進行更新;
反之,無法進行更新。
在編碼中,我們使用ExecuteNonQuery執行更新SQL文,而對返回的影響件數進行判斷;對於影響零件的情況,視為資料不一致的更新行為,報排他異常。
對於主鍵的使用:
小型系統一般都使用自動增長唯一標識列,都是提交資料後查詢主鍵,使用SQL Server 2005以上的系統,可以通過如下SQL文和輸出引數獲得自動增長的主鍵值:
INSERT Categories(CategoryName) Values(@CategoryName) SET @Identity=SCOPE_IDENTITY()
其中輸出引數@Identity就是返回的自動增長主鍵值。
而對於比較複雜的系統,如包含部分更新及全部更新和主細表同時更新的情況下,需要自己在伺服器端進行主鍵設定,此種情況建議把主鍵型別設定為GUID型而不使用自動生成屬性,這樣就可以在更新執行之前設定主表資料主鍵以及詳細表資料的外來鍵並進行更新了。
4.事務控制方面,主要使用隱式事務在業務邏輯層就將事務開啟。
5.對於資料庫訪問層建議大家多使用Enterprise Libarary的資料訪問元件,優化方面可以根據自己的設計進行,同時可以使用AOP元件對結構進行優化,我們自己的專案使用PostSharp對所有層的異常處理和日誌輸出進行了優化。
1.完成物件導向的資料訪問
2.減少呼叫側程式碼量
3.滿足可擴充套件的系統需求
4.保證資料一致性
其中,對於訪問層基礎結構設計,採用如下原則。
1.對於物件導向系統,採用DataReader方式進行資料讀取;
2.為了減少呼叫側程式碼量和滿足可擴充套件的系統需求,採用反射實現動態的屬性訪問;
作者參與系統使用Codeplex的專案FastReflection作為反射工具,對於物件基本屬性可通過屬性名字串直接訪問,
例,Teacher類有屬性ClassID,我們可通過teacher.Item("ClassID")對其進行讀寫;
很多人擔心反射的效率問題,當然自己每次生成屬性訪問器可達到只有4倍的效率低下,而直接使用FastReflection可能會達到近40倍的效率低下;但1000000次讀寫在0.7秒內完成與可擴充套件的目標權衡起來,還是可以採用的。
3.為了保證資料的一致性,我們採用每個資料表都有物理主鍵ID,型別為GUID的設計;同時使用DateTime型UpdDateTime欄位來記錄插入和更新時間,作為排他的基本條件。
如何保證資料排他:
使用者A和使用者B同時取得一條資料進行更新的同時,使用UpdDateTime作為條件,如果UpdDateTime一致則可進行更新;
反之,無法進行更新。
在編碼中,我們使用ExecuteNonQuery執行更新SQL文,而對返回的影響件數進行判斷;對於影響零件的情況,視為資料不一致的更新行為,報排他異常。
對於主鍵的使用:
小型系統一般都使用自動增長唯一標識列,都是提交資料後查詢主鍵,使用SQL Server 2005以上的系統,可以通過如下SQL文和輸出引數獲得自動增長的主鍵值:
INSERT Categories(CategoryName) Values(@CategoryName) SET @Identity=SCOPE_IDENTITY()
其中輸出引數@Identity就是返回的自動增長主鍵值。
而對於比較複雜的系統,如包含部分更新及全部更新和主細表同時更新的情況下,需要自己在伺服器端進行主鍵設定,此種情況建議把主鍵型別設定為GUID型而不使用自動生成屬性,這樣就可以在更新執行之前設定主表資料主鍵以及詳細表資料的外來鍵並進行更新了。
4.事務控制方面,主要使用隱式事務在業務邏輯層就將事務開啟。
5.對於資料庫訪問層建議大家多使用Enterprise Libarary的資料訪問元件,優化方面可以根據自己的設計進行,同時可以使用AOP元件對結構進行優化,我們自己的專案使用PostSharp對所有層的異常處理和日誌輸出進行了優化。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-610607/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ABP框架之——資料訪問基礎架構框架架構
- ABP框架之——資料訪問基礎架構(下)框架架構
- Redis基礎資料結構Redis資料結構
- 資料結構基礎 連結串列資料結構
- 基礎資料結構大賞資料結構
- Pytorch基礎-tensor資料結構PyTorch資料結構
- 如何使用RedisTemplate訪問Redis資料結構Redis資料結構
- Redis基礎——剖析基礎資料結構及其用法Redis資料結構
- Golang基礎程式設計(一)-基本結構、資料型別、流程語句Golang程式設計資料型別
- Pandas庫基礎分析——資料生成和訪問
- js 中基礎資料結構陣列去重問題JS資料結構陣列
- 資料庫設計基礎資料庫
- 資料結構基礎--雜湊表資料結構
- 資料結構基礎第3講資料結構
- 資料結構基礎第4講資料結構
- Redis基礎資料結構之字串Redis資料結構字串
- Redis基礎資料結構之MapRedis資料結構
- Redis基礎資料結構之SkipListRedis資料結構
- 基礎資料結構之遞迴資料結構遞迴
- 基礎資料結構之陣列資料結構陣列
- 淺析Redis基礎資料結構Redis資料結構
- 大資料基礎架構總結大資料架構
- [20190930]關於資料結構設計問題.txt資料結構
- Redis基礎資料結構之連結串列Redis資料結構
- 探索Redis設計與實現1:Redis 的基礎資料結構概覽Redis資料結構
- 資料倉儲架構分層設計架構
- 2021秋招面試計算機基礎總結 - 演算法,資料結構,設計模式,Linux面試計算機演算法資料結構設計模式Linux
- Python基礎之os和資料結構Python資料結構
- Redis 的基礎資料結構(三)物件Redis資料結構物件
- Python基礎之:Python的資料結構Python資料結構
- 公共基礎知識-資料結構-樹資料結構
- 前端資料結構---相關基礎概念前端資料結構
- Redis基礎(一)資料結構與資料型別Redis資料結構資料型別
- Redis - 底層資料結構Redis資料結構
- 基礎夯實:基礎資料結構與演算法(一)資料結構演算法
- Android基礎與應用 資料儲存與訪問Android
- spring mvc 的jpa JpaRepository資料層訪問SpringMVC
- 資料結構與演算法 基礎排序資料結構演算法排序
- Coursera北大《資料結構基礎》之概論資料結構