昨天我們終於導入 Repository Pattern,也用到了 DI 的服務,但除了解除強耦合之外,還能有甚麼好處呢?
今天我將展示如何運用這兩樣東西,讓系統在切換正式、測試資料時,可以無痛轉換。
在 31 行,我們利用 DI,只要偵測到 IEventsRepository
介面時,指定注入了 EventsRepository
的類別,而 EventsRepository
放置了呼叫 EF Core 的 Code,也就是說這裡是資料的放置處。
換句話說,DI 不會管內容是甚麼,Action 在呼叫方法時也不會管資料是怎麼來的、用甚麼方法取的,只要管呼叫時取不取得到資料就好,那麼我們只要讓 Repository 的方法回傳對的型態,資料怎麼來的沒關係。
知道了整體流程後,就可以來實作測試資料了。
一樣畫葫蘆,建立一個 Repository,命名為 MockEventsRepository
:
接下來一樣實作 GetEvents()
來示範:
其實就是人工實作 Events
和 EventsInfo
,然後做成 List 型別,並放到 Return。
回頭看 DI 的地方,將原本的 EventsRepository
換成 MockEventsRepository
:
接下來我們實際啟動服務來看看是否可以正常瀏覽。
可以看到依然可以正常瀏覽,並且是剛剛建立的測試資料,在切換期間,我們並沒有異動到 Controller、Action、DbContext 的 Code,僅僅只是更換了 DI 注入的來源 Repository,如此就達到了切換資料環境的功用,而且不影響到服務的執行穩定度。
今天從實作測試資料的結果,可以理解到 DI 與 Repository Pattern 的好處,未來如果要切換正式、測試環境,都不會影響到系統的功能,否則切個環境就要異動功能的 Code,這實在太危險。
但從瀏覽畫面可以發現,CategoryId 一直都不是我們想要看到的結果,應該要顯示 EventsCategoryEnum 的內容,明天來解決這個問題。
那麼我們明天見!