日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于事件驱动架构构建微服务第3部分:Presenters, Views和Controllers

發布時間:2023/12/4 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于事件驱动架构构建微服务第3部分:Presenters, Views和Controllers 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接:https://logcorner.com/building-microservices-through-event-driven-architecture-part3-presenters-views-and-controllers/

在本文中,我將實現Presentation(展示層)。這里的展示層不是指用戶界面而是Web API。

也可以在實現展示層之前先實現repository,順序無所謂。

IUnitOfWork和ISpeechRepository將被注入到RegisterSpeechUseCase中。因此,必須實例化IUnitOfWork和ISpeechRepository才能獲得IRegisterSpeechUseCase的實例

類似這樣

但是,由于我正在模擬IRegisterSpeechUseCase,因此我仍然不需要IUnitOfWork和 ISpeechRepository的具體實現。

因此,當repository實現并準備好使用時,我再配置依賴項注入。當一個團隊正在處理Presentation而另一個團隊正在處理repository時,這很有用。在這種情況下,每個團隊都可以持續推進自己的工作,而無需等待其他團隊。

Presentation屬于Clean架構中的接口適配器

接口適配器

在這里,我必須創建一個接受dto的HttpPost操作,其中包含有關我要創建的語音的信息。如果這個信息是正確的,我會調用用例的handle函數,并將dto轉換為command作為參數傳遞。如果dto的信息不正確,我將返回BadRequest或400 然后執行用例,如果一切正常,我返回200,否則返回500

所以我的第一個測試將是:使用無效的ModelState注冊語音返回BadRequest

所以讓我們創建它

下一步是創建SpeechForCreationDto類和SpeechController類:

SpeechForCreationDto

SpeechController

然后我的第一個測試通過

我的第二個測試將驗證_registerSpeechUseCase.Handle(command)只調用一次并返回OK

所以,為了讓之前的測試通過,我必須像這樣調用_registerSpeechUseCase.Handle

最后一個測試是在發生異常時處理InternalServerError(500)

我更喜歡創建一個中間件以便在全局范圍內捕獲錯誤,如果拋出異常,我將按以下步驟進行:

  • 記錄StackTrace,logger.LogError($”出現問題:{ex.StackTrace}”);

  • 返回內部服務器錯誤,StatusCode = 500

我在整個應用程序中使用了一個try/catch塊。通過執行以下操作,也可以不使用try/catch塊:

Presentation的代碼覆蓋率為63%:

未測試的是Startup類和Program類以及ExceptionMiddleware.MoveNext()函數

我可以添加更多測試來覆蓋它們,但我也可以保留它們,因為它們將被集成測試覆蓋

歡迎關注我的個人公眾號”My IO“

總結

以上是生活随笔為你收集整理的基于事件驱动架构构建微服务第3部分:Presenters, Views和Controllers的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。