iT邦幫忙

2022 iThome 鐵人賽

DAY 16
0
自我挑戰組

用 30 天和 ASP.NET Core 打造一個活動報名管理系統系列 第 16

ASP.NET Core - 活動報名管理系統:Day16 Repository Pattern 與 DI 的便利:正式、測試資料切換

  • 分享至 

  • xImage
  •  

前言

昨天我們終於導入 Repository Pattern,也用到了 DI 的服務,但除了解除強耦合之外,還能有甚麼好處呢?

今天我將展示如何運用這兩樣東西,讓系統在切換正式、測試資料時,可以無痛轉換。

DI

在 31 行,我們利用 DI,只要偵測到 IEventsRepository介面時,指定注入了 EventsRepository 的類別,而 EventsRepository 放置了呼叫 EF Core 的 Code,也就是說這裡是資料的放置處。

換句話說,DI 不會管內容是甚麼,Action 在呼叫方法時也不會管資料是怎麼來的、用甚麼方法取的,只要管呼叫時取不取得到資料就好,那麼我們只要讓 Repository 的方法回傳對的型態,資料怎麼來的沒關係。

知道了整體流程後,就可以來實作測試資料了。

MockRepository

一樣畫葫蘆,建立一個 Repository,命名為 MockEventsRepository

接下來一樣實作 GetEvents() 來示範:

其實就是人工實作 EventsEventsInfo,然後做成 List 型別,並放到 Return。

Startup.cs

回頭看 DI 的地方,將原本的 EventsRepository 換成 MockEventsRepository

接下來我們實際啟動服務來看看是否可以正常瀏覽。

實際使用

可以看到依然可以正常瀏覽,並且是剛剛建立的測試資料,在切換期間,我們並沒有異動到 Controller、Action、DbContext 的 Code,僅僅只是更換了 DI 注入的來源 Repository,如此就達到了切換資料環境的功用,而且不影響到服務的執行穩定度。

本日結語

今天從實作測試資料的結果,可以理解到 DI 與 Repository Pattern 的好處,未來如果要切換正式、測試環境,都不會影響到系統的功能,否則切個環境就要異動功能的 Code,這實在太危險。

但從瀏覽畫面可以發現,CategoryId 一直都不是我們想要看到的結果,應該要顯示 EventsCategoryEnum 的內容,明天來解決這個問題。

那麼我們明天見!


上一篇
ASP.NET Core - 活動報名管理系統:Day15 Repository Pattern
下一篇
ASP.NET Core - 活動報名管理系統:Day17 讓 View 顯示 Enum 的文字
系列文
用 30 天和 ASP.NET Core 打造一個活動報名管理系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言