基于事件驱动架构构建微服务第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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NET问答: 如何集中化统一验证 Aut
- 下一篇: 记一次 .NET 某智慧水厂API 非托