Winform開發框架之資料訪問層的設計

2021-09-22 13:22:11 字數 1908 閱讀 6561

前面介紹過,該winform開發框架支援多種資料庫的訪問,只需要對配置進行修改即可切換,如下圖所示。

其中我們可以看到,裡面有幾種資料訪問層的相關資料,大致知道是通過同一的idal資料訪問層介面派生出幾個對應不同資料庫的操作層,由業務邏輯層bll進行相應的呼叫,但是具體細節從上圖並不能了解到。

其實他們的大致關係如下圖所示。 

首先bll層,通過bllfactory物件,根據配置資訊,例項化不同的業務訪問物件,轉換為資料訪問層介面進行呼叫的,bllfactory通過反射間接方式,構建出不同資料庫物件的資料訪問層,而資料訪問物件,他們都整合了基類basedal,這個基類封裝類了絕大多數的增刪改查等基礎性操作,並通過高度抽象,只需要繼承該基類的子類過載部分函式即可完成較為豐富的操作實現。具體的繼承關係如下圖所示。

由於每個不同資料庫都需要擁有乙個basedal,那麼很多相同的操作**就會發生冗餘,因為大多數資料庫的基礎操作是一樣的,只有一部分比較特別,需要進行個性化處理,因此對以上的資料訪問層進行優化設計,得到下面的設計圖,如下所示。

由於把basedal層的通用操作,進一步提公升抽象到abstractbasedal 類裡面進行管理,因此,basedal雖然在各種資料庫的資料訪問層中存在,但是,卻只是需要實現很少的**,如下所示。

因為不同的資料庫,findfirst(查詢第一條)、findlast(查詢最後一條)、insert2(插入記錄後,返回新增的主鍵值)、以及分頁查詢findtodatatable、findwithpager等不同。因此資料訪問層的basedal子類需要覆蓋基類abstractbasedal的這些實現。

通過實現部分個性化資料庫操作的函式及強大的基類

abstractbasedal實現,我們可以看到,整個資料訪問層基類得到非常強大的操作功能,如下所示。

1)sqlserver的findfirst語句如下:

string sql = 

string.format(

"select top 1  from  order by  asc

", selectedfields, tablename, getsafefilename(sortfield));

2)oracle的findfirst語句如下:

select * from (select  from  order by  asc)   where rownum <= 1 order by rownum asc

", selectedfields, tablename, getsafefilename(sortfield));

3)sqlite的findfirst語句如下:  

select  from  order by  asc limit 1

", selectedfields, tablename, getsafefilename(sortfield));

為了實現功能強大的資料訪問基類,並盡可能減少重複**,高度提煉基類是很有效的方法。適當的整合關係,使得**量更少,擴充套件更加容易,這個就是我的winform框架的優化思想。

Winform開發框架之資料曲線報表

在專案開發中,往往會碰到一些非常規的需求,每次碰到這種情況,都需要花費時間來整理自己的思路,然後參考網路上其他人的實現方式或者作法,有時候可以找到一些相同的模組進行改進即可符合需求,但往往很多是需要自己潛心研究,然後提煉優化,雖然探索過程還是比較開心,不過時間肯定是需要花不少的。我每次碰到這種情況,...

Winform開發框架之資料曲線報表

在專案開發中,往往會碰到一些非常規的需求,每次碰到這種情況,都需要花費時間來整理自己的思路,然後參考網路上其他人的實現方式或者作法,有時候可以找到一些相同的模組進行改進即可符合需求,但往往很多是需要自己潛心研究,然後提煉優化,雖然探索過程還是比較開心,不過時間肯定是需要花不少的。我每次碰到這種情況,...

Winform開發框架之介紹

框架已經正式改名為 yeswin開發框架,最新資料請前往 yeswinform 簡介 yes快速開發平台框架 yesdotnet.com winform開發框架,儘量減少程式設計師在介面中的 量和工作量,model自動生成,介面以及控制項自動生成,簡單的邏輯自動生成。自動生成的介面已經實現簡單邏輯增...