[ASP.NET Core MVC][Vue3][Dapper] 後端資料庫底層架構建置

[ASP.NET Core MVC][Vue3][Dapper] 後端資料庫底層架構建置 #CH3

在前兩個教學章節我完成了新增、修改、刪除及查詢的資料庫語法,而我教學的語法會放在第一層全部展示,這適合教學好理解,但不適合專案使用,不然會大量出現相同功能的程式碼,而在這個章節會做一次後端資料庫物件導向化的底層架構建置。

底層架構建置是一種方法抽離的過程,將相同功能的程式碼抽離至方法內,只提供方法呼叫,可以簡化重複撰寫的程式碼。

擁有底層架構的專案,在撰寫程式碼就會減短許多,這也是物件導向的精神,將相同功能封裝起來,只提供對外呼叫的方法。

接下來這個範例會將前面兩個章節的範例,將資料庫執行的共用的部份,封裝到底層的類別庫,實現資料庫底層類別庫的製作。

在開始之前,建議你先實作完第一篇第二篇的教學範例,會比較好理解底層架構的建置過程。

建立底層類別庫

底層類別庫是適用在多數方案引用的專案,編譯後為一個 .dll 檔案,所以我們在現有的方案加入一個新專案,輸出類型為「類別庫」。
執行「解決方案 > 加入 > 新增專案」。

建立底層類別庫

在「新增專案」內選擇「類別庫」。

建立底層類別庫

輸入專案名稱「ProjectLibrary」,架構為「.NET 6.0」 。

建立專案後,可以移除預設的 Class1 類別,然後新增一個資料夾,名為「Base」。

建立專案後,可以移除預設的 Class1 類別,然後新增一個資料夾,名為「Base」

建立業務邏輯底層類別

在「Base」內新增一類別,名稱為「BusinessBase」,此類別為處理業務邏輯與資料庫互動的類別,之後給業務邏輯類別繼承使用,可以將許多共用方法放在此處。

在 BusinessBase 內貼上以下語法:

此類別的主要目的是動態產生可執行的 SQL,當傳入欄位有值時,才動態產生 SQL 語法。

建立資料庫管理類別

接著新增第二個類別,在「ProjectLibrary」專案下新增一個資料夾名為「DB」,然後在「DB」資料夾下新增一類別,名稱為「DBManager」。

建立資料庫管理類別

在 DBManager 內貼上以下語法:

與資料庫互動使用微型 ORM 套件 Dapper,這個是新專案,所以要再次安裝 Dapper 套件。

這裡有一個新類別「DBConn」,所以在「DB」目錄下新增此類別,名為「DBConn」,然後貼上以下語法:

建立專案底層 Controller

接著這裡回到我們的 MVC 專案上,我們要針對 Controller 建立基礎類別,讓所有的 Controller 繼承此類別。

在 Controllers 目錄下新增類別,名稱為「BaseController」,此類別要繼承 Controller。

建立專案底層 Controller

BaseController 類別要覆寫底層的一些生命週期事件,讓我們專案在預設執行時,就載入一些設定,並在生命週期事件完成基礎工作。

在 BaseController.cs 類別內,加入以下語法:

類別用到的 DBManager 來至 ProjectLibrary 類別庫,所以我們需要把 ProjectLibrary 類別庫引用到 MVC 裡面來。

在專案的「相依性 > 新增專案參考」,可以載入類別庫,再將 ProjectLibrary 專案入載即可。

在專案的「相依性 > 新增專案參考」,可以載入類別庫,再將 ProjectLibrary 專案入載即可

建立專案底層 Model

建立底層 Model 目的讓所有的 ViewModel 都繼承此類別,這樣有助於將共用欄位放至底層,而不用在每一個 ViewModel 都宣告相同欄位。

例如呼叫 Action 時,回傳的 Model 裡面都包含了「ErrMsg」欄位,這是讓 View 前端檢查是否有錯誤訊息的欄位,像這種共用欄位就可以放在底層 Model 裡面。

在 BaseController 類別用中到的 PaginationModel 原本寫在 \Models\AdmAnnoViewModel.cs 裡面,此類別也屬於共用 Model 的範圍,所以適合放在底層 Model 裡面。

可以建立一個共用的 Model 類別,在「Models > 加入 > 類別」,建立新類別,名稱為「BaseModel」。

在「Models > 加入 > 類別」,建立新類別

這樣就可以把共用的 Model 放在這裡,可以貼上以下語法:

做到這裡已經完成基礎的底層建置工作,接著就要著手建立業務邏輯的部份。

建立業務邏輯類別

這裡的業務邏輯指的是專案內的功能實作,實作內容大多是資料庫的執行動作,例如會員功能會建立一個 BusMember 類別專門處理會員相關的工作,而在我們這次的範例是網站公告,所以我會建立一個 BusAnnouncement 類別,將公告相關業務邏輯放在這裡。

在 MVC 專案內,我們先建立一資料夾,取名為「Business」,然後在裡面新增一類別,名為「BusAnnouncement」,BusAnnouncement 類別會繼承我們剛剛建立的 BusinessBase。

在 MVC 專案內,我們先建立一資料夾,取名為「Business」,然後在裡面新增一類別,名為「BusAnnouncement」

然後在 BusAnnouncement 類別,加入以下語法:

這裡寫了針對資料庫的執行動作,通常一個 Table 只需要提供 4 種方法 (新增、修改、刪除、查詢) 即可。

修改 ViewModel 繼承 BaseModel

我們剛剛新增了 BaseModel 類別,這裡要開啟 \Models\AdmAnnoViewModel.cs,將裡面原本的 Model 全部都繼承 BaseModel 類別,同時移除不需要存在的 PaginationModel
可以貼上以下語法:

修改 Controller 語法

前面做了這麼多工作,這裡要執行最後一個動作了,將原本在 AdmAnnoController 的語法簡化一下,改成執行 BusAnnouncement 裡面的方法就好了。

例如原本在查詢的語法有這麼多,而接下來就不用寫這麼多語法了,只要呼叫業務邏輯的方法就好。

例如原本在查詢的語法有這麼多

在修改之前,我們需要先將 AdmAnnoController 繼承 Controller 改繼承 BaseController

將 AdmAnnoController 繼承 Controller 改繼承 BaseController

接著將原本在 AdmAnnoController 的 4 個方法 Query(), AddSave(), EditSave(), DelCheck(),取代成以下的語法:

方法 PreparePage() 已經抽離至 BaseController 類別了,所以就不需要存在 AdmAnnoController 了。

寫到這裡你可以再按 F5 執行一下專案,是否操作結果跟原本的功能一樣,而 Controller 語法更簡潔了。

這都是因為前面做了這麼多底層工作,才可以讓業務邏輯的程式碼變的這麼短,將許多共用程式碼抽離至底層,讓 Controller 簡化語法,專注在解決業務問題,這也是物件導向的精神。

此篇文章屬於進階學習,是提昇底層架構的一種實作方法,如果你看的懂,恭喜你也擁有好的專案開發架構觀念。

範例下載

連結 GitHub 下載範例

下一篇教學文章

相關學習文章

如果你在學習上有不懂的地方,需要諮詢服務,可以參考站長服務,我想辨法解決你的問題
如果文章內容有過時、不適用或錯誤的地方,幫我在下方留言通知我一下,謝謝

加入社團一起討論

關注我的 IG

One thought on “[ASP.NET Core MVC][Vue3][Dapper] 後端資料庫底層架構建置 #CH3

Comments are closed.