qq网页版 登陆,郑州专业seo推荐,牛年起广告公司名字,中国公司网站建设方案原文链接#xff1a;https://logcorner.com/building-microservices-through-event-driven-architecture-part3-presenters-views-and-controllers/在本文中#xff0c;我将实现Presentation(展示层)。这里的展示层不是指用户界面而是Web API。也可以在实现展示层之前先实现r… 原文链接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类SpeechForCreationDtoSpeechController然后我的第一个测试通过我的第二个测试将验证_registerSpeechUseCase.Handle(command)只调用一次并返回OK所以为了让之前的测试通过我必须像这样调用_registerSpeechUseCase.Handle最后一个测试是在发生异常时处理InternalServerError(500)我更喜欢创建一个中间件以便在全局范围内捕获错误如果抛出异常我将按以下步骤进行记录StackTracelogger.LogError($”出现问题{ex.StackTrace}”);返回内部服务器错误StatusCode 500我在整个应用程序中使用了一个try/catch块。通过执行以下操作也可以不使用try/catch块Presentation的代码覆盖率为63%未测试的是Startup类和Program类以及ExceptionMiddleware.MoveNext()函数我可以添加更多测试来覆盖它们但我也可以保留它们因为它们将被集成测试覆盖欢迎关注我的个人公众号”My IO“