基于事件驱动架构构建微服务第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,一经查实,立即删除!

相关文章

hashtable与HashMap区别

看到了很多的面试题集里都有这么一个题:HashMap和Hashtable的区别,自己也看了好几遍了,总是不记得,写下来当是一次笔记吧. 区别一它们的父类不同 public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializabl…

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

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

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

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

Mysql ID重新排列

我们经常会遇到&#xff0c;在删除数据库某条记录时&#xff0c;原来的ID排序会有间隔&#xff0c;比如删除了ID为8的数据,这个表的ID排序就会从7直接到9, 那我们如何解决这个ID重新排列的问题呢? 只需一下三步: 1.删除这个表的ID ALTER TABLE table_name DROP id; 2.重新建立…

java基础进阶(文件列表,线程,线程组)编程实例(4篇)

此处刊登代码均测试通过&#xff0c;完全准确&#xff01; import java.io.*; public class DirList{ public static void main(String[] args){ try{ File pathnew File("."); /*“.”指当前目录*/ String[] list; if(args.length0) listpath.list();/*列出当前文件…

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

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

失业日志:2009年10月12日星期一

反正也是空&#xff0c;突发奇想把这段失业的心态记录下来&#xff0c;也挺有趣的。 从进行产品支持&#xff0c;每天过着算是有规律的日子&#xff0c;到狠下心放弃产品技术支持&#xff0c;经历了三次辞职。最后一次&#xff0c;终于放下心头的石头&#xff0c;朝自己喜欢的方…

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

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

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

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

zend guard6的使用

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

回忆一 --- 去年6月面试进入公司的日子

2007年6月&#xff0c;我投了一份简历到后来一直工作的公司应聘&#xff0c;做对日软件外包业务的&#xff0c;不过有翻译&#xff0c;对日语要求不高。我投递了简历的第二天被通知面试。还好&#xff0c;因为技术考题偏于数据结构和算法&#xff0c;而不是实际项目经验&#x…

Magicodes.IE之快速导出Excel

前言总是有很多朋友咨询Magicodes.IE如何基于ASP.NET Core导出Excel&#xff0c;出于从框架的体验和易用性的角度&#xff0c;Magicodes.IE决定对Excel的导出进行独立封装&#xff0c;以便于大家更易于使用&#xff0c;开箱即用。注意&#xff1a;Magicodes.IE是从框架的易用性…

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

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

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

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

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

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

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

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;

做个中国清官网,有人感兴趣吗

关于官员或者放宽到公务员群体的廉洁问题&#xff0c;从来都是公众关注的热点和焦点&#xff0c;如果能够运用网络的力量&#xff0c;荐贤戒腐&#xff0c;也是一个很有意义的事情。所以&#xff0c;有了这样一个想法&#xff0c;想做一个中国清官网&#xff08;暂定名&#xf…

为什么 Linux 上的 Asp.NET 5 需要 Kestrel ?

咨询区 Freeman Helmuth&#xff1a;当我在 Linux 上部署 ASP.NET 5 时&#xff0c;我试着了解整个 Web应用程序框架&#xff0c;所有的文档我都看过&#xff0c;包括这篇 http://docs.asp.net/en/latest/conceptual-overview/aspnet.html#servers 都没有找到我想要的答案。为…

针对Spring的Spring Retry 我发现了这样一个大家都不知道的技巧!

外部服务对于调用者来说一般都是不可靠的&#xff0c;尤其是在网络环境比较差的情况下&#xff0c;网络抖动很容易导致请求超时等异常情况&#xff0c;这时候就需要使用失败重试策略重新调用 API 接口来获取。重试策略在服务治理方面也有很广泛的使用&#xff0c;通过定时检测&…

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

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