基于事件驱动架构构建微服务第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“

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛逼!不得不服,第一次有人把Java 反射机制讲解这么透!

反射概述 什么是反射 将类的各个组成部分封装为其他对象的过程就叫做 反射,其中 组成部分 指的是我们类的 成员变量(Field)、构造方法(Constructor)、成员方法(Method)。 使用反射的优缺点 …

拿破仑最欣赏的数学家,师从拉格朗日,撕逼泊松,一生痴迷热学最后却死于热学...

全世界只有3.14 % 的人关注了 青少年数学之旅 这几天,终于变凉了,超模君再也不用被热死了。 但炎热夏日的离去,也让超模君想起了那个和热脱不了关系的数学家——傅里叶。 “对自然界的深入研究是数学发现最丰富的源泉” ——节选自 《数学之旅…

记一次 .NET 某智慧水厂API 非托管内存泄漏分析

一:背景 1. 讲故事七月底的时候有位朋友在wx上找到我,说他的程序内存占用8G,托管才占用1.5G,询问剩下的内存哪里去了?截图如下:从求助内容看,这位朋友真的太客气了,动不动就谈钱&…

直接开撸! 阿里Spring高频面试题泄露,持续更新~

阿里HR面试核心的几个问题: 1、你为什么离职? 2、你怎么看待自己的职业生涯?(包括怎么平衡家庭和工作的关系、加班、选择一家公司时的考量、location等) 3、薪资期望 4、项目中遇到的最大挑战是什么?怎么…

重磅!Nature盘点年度十佳论文,生命科学占据半壁江山,中国学者表现亮眼

全世界只有3.14 % 的人关注了青少年数学之旅科学是人类进步的阶梯!在当今社会,科学技术的发展进步将为人类社会带来巨大的效益,毫不夸张的说,科学指引并推着着人类文明的进程。基础科学作为科学技术的理论基石,其重要性…

zend guard6的使用

1.生成key edit->preferences->license Keys->generate 2.新建product license文件 3.新建Zend Guard项目文件 需要注意新建项目的第二项需要英文路径 4.在项目上按右键 选择configure 初始界面是 如果要用做授权,点击security按键 然后设置license文件等 附上php.in…

理解T-SQL: 脚本和批处理

脚本能够将相应的T-SQL命令组织起来,实现一个完整的功能目标。脚本提供了变量、分支、循环等控制语句,可以用来实现一些复杂的任务。通过组织一系列的SQL命令编成脚本和批处理,也减低了数据库管理的复杂性。 1. USE语句 没啥好讲的&#xff0…

凉凉!面试阿里我被Redis技术专题给搞的昏倒在地~

凉凉!面试阿里我被Redis技术专题给弄死了~ 📚我本以为我可以像是别的博主一样去阿里面试随随便便,因为Redis,我直接被阿里大佬淦翻在地上 好了不装了 没过没关系 我总结了一些这些最难的知识点!!&#xff0…

与众不同 制作会唱歌的WinRAR - imsoft.cnblogs

为了使用方便,我们可能会把RAR压缩包制作成自解压文件。WinRAR自带的自解压模块虽然使用很方便,但千篇一律的外观看起来实在 乏味。其实,只要通过简单改造,你就可以制作出与众不同,声色俱佳的WinRAR自解压界面&#xf…

看到这一幕,我甚至都想戒烟了。。 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅(图源网络,侵权删)

c#3.0关于JSON简单操作的实用帮助类(泛型实现)

关于json的操作,网上一搜一大把。避免重复造轮子,整理发布一个笔者在项目开发中经常用到的一个json实用帮助类,泛型实现,非常方便。不废话了,贴代码:1、json操作的帮助类: Codeusing System;usi…

谁还没个黑历史了。。。 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅(图源网络,侵权删)

C# 虚方法与抽象方法区别

虚方法是必须要实现的,只有接口或者抽象方法才没有实现体,什么是实现体,就是方法的那对大括号:下面举例:public abstract void Fn1();//定义一个抽象方法 public vitrual void Fn2(){ };//定义一个虚方法(那对大括号必…

京东面试官:呦,你对中间件 Mycat了解的还挺深~

1.数据切分概念 数据的切分[(Sharding)]根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的表(或者Schema)来切分到不同的数据库(主机))之上,这种切可以称之为数据的垂直…

Redis与Memcached的区别

2019独角兽企业重金招聘Python工程师标准>>> 传统MySQL Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量…

“高仿版拼多多”宣告破产!曾一年收割1.3亿用户,如今自救失败负债16亿

全世界只有3.14 % 的人关注了青少年数学之旅又一家改变世界的互联网公司跑路了啊?挣扎数月的淘集集最终也回天乏术了。淘集集并购重组最终失败,供应商何时能拿到被拖欠的货款仍然遥遥无期。这家主打比“拼多多”更下沉市场的社交电商,平台上线…

处在哪个阶段?

在职业生涯中,可以划分出多个阶段,但是如下3个阶段也许是最粗糙和实在的: 1、入门级,在别人的领导下可以完成工作。 2、成熟级,可以独立完成工作。 3、精英级,可以领到别人完成工作。 你处在哪个阶段&#…

在VS Code中直接调试Web程序,是怎样一种体验?

前言要在VS Code中启动Chrome或Microsoft Edge中调试任何Web程序,您只需按F5或选择菜单"运行"->"启动调试"来启动会话。你可以选择在Chrome、Edge或Node.js中进行调试。Edge DevTools如果选择了Edge进行调试,你会发现调试工具条上…

面试官问:你做过什么Java线程池实践,我写了一篇博客给他看~

线程池大家都## 标题很熟悉,无论是平时的业务开发还是框架中间件都会用到,大部分都是基于JDK线程池ThreadPoolExecutor做的封装, 都会牵涉到这几个核心参数的设置:核心线程数,等待(任务)队列,最大线程数&am…

【Blog.Idp开源】支持在线密码找回

(一个做认证平台,必须会遇到的一个问题)BCVP框架,是基于:ASP.NETCore5.0VUE.jsIdentityServer4等核心技术,实现的前后端分离与动态认证鉴权一体化平台。01密码找回认证中心绕不开的话题Architecture Design.无论你是自…