基于事件驱动架构构建微服务第4部分:repositories

原文链接:https://logcorner.com/building-microservices-through-event-driven-architecture-part4-repositories/

在本文中,我将实现Repositories的命令端。存储库属于Clean架构的接口适配器

在这一步中,我将开始实现基础设施的命令端,我将专注于如何持久化数据。

我将使用EntityFrameworkCore和SQL Server。

因为LogCorner.EduSync.Speech.Application.UseCases使用ISpeechRepository作为依赖项,我认为最明显的方法是从实现ISpeechRepository开始,然后继续实现它的依赖项等......但既然我知道我要去哪里,我将按以下步骤进行:

  • UnitOfWork:我将使用UnitOfWork模式,它将帮助我将AggregateRoot视为一个用于数据更改的单元。

  • 存储库:我将使用存储库模式,AggregateRoots是我的代码从存储库加载的唯一对象 让我们创建一个通用存储库IRepository并应用AggregateRoot约束。

我的IRepository如下所示:

T是一个AggregateRoot并且TIdentifier是AggregateRoot主键的类型:int、Guid等等……

ISpeechRepository实现了IRepository<Speech, Guid>,其中Speech是 AggregateRoot,Guid是Speech.Id的类型

无法为非AggregateRoot实体创建存储库:例如MediaFile

IUnitOfWork.Commit持久化(保存或更新)整个聚合(AggregateRoot和相关实体)

UNITOFWORK

让我们从测试IUnitOfWork开始,它将导致UnitOfWork的实现。后者将需要一个从 DbContext继承的类。(在我的情况下是 DataBaseContext)

测试1:保存时,IUnitOfWork.Commit应该保存聚合根并且DbContext.SaveChanges只调用一次

UnitOfWork的实现

让我们创建一个继承自DbContext的DataBaseContext类

UnitOfWork第一次测试的最终实现

实现UnitOfWork.Dispose

测试2:disposing时,unitOfWork.Dispose只调用一次

让我们实现UnitOfWork.Dispose()

在此阶段,解决方案编译通过,所有测试均通过,LogCorner.EduSync.Speech.Infrastructure的代码覆盖率为100%

REPOSITORY

测试3:验证CreateAsync可以在Repository上调用并且应该触发dbset.AddAsync

Repository只能用AggregateRoot实例化,所以让我们创建一个继承自 AggregateRoot的类进行测试。

Repository的最终实现将如下所示

SPEECHREPOSITORY

测试4:验证是否可以在SpeechRepository上调用CreateAsync并仅触发Repository.CreateAsync一次

这个测试的目标是实现SpeechRepository,所以我验证当SpeechRepository.CreateAsync 被调用时,Repository.CreateAsync只被调用一次

这是SpeechRepository的最终实现

MAPPING

本节的实现因使用的ORM(EF、NHibernate或其他)而异。例如,我们可以创建特定于存储库(SpeechDao)的类并应用SpeechDao和Speech之间的映射。SpeechDao可以看作是领域的Speech类的重复类(属性)。

但是,EF可以通过提供IEntityTypeConfiguration接口,而无需创建存储库特定的类,然后在重复的类之间应用映射。

我可以使用它来将领域对象指向数据库表,而无需在SpeechDao和Speech之间应用额外的映射,如下所示:

我们可以注意到,ValueObjects是如何管理的

您需要知道的最后一件事是EFCore需要一个无参数构造函数,因为它使用反射来完成它的工作。

如果您不想更新领域类并引入私有无参数构造函数,则应创建存储库特定类,然后在重复类之间应用映射。这个存储库特定的类应该有无参数的构造函数。

DATABASE

我使用 SSDT设计了Sql Server数据库,这将有助于我的devops管道

CONFIGURE

配置 LogCorner.EduSync.Speech.Presentation以定位sql数据库

最后,完成依赖注入的配置

API测试

现在可以使用postman测试整个应用程序

欢迎关注我的个人公众号”My IO“

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

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

相关文章

小松

之前做过一次小小的介绍(没看过的请参看此文&#xff1a;闲话小松)&#xff0c;相信不少老朋友应该都知道我是谁了。还不认识我的朋友可以称呼我小松(这名号有年头了&#xff0c;听习惯了^_^)&#xff0c;当然你喜欢怎么喊都成&#xff1a;)偶是个是理想主义的倡导者&#xff0…

vlan后 出现 outlook 正在试图从服务器检索数据

vlan后 出现 outlook 正在试图从服务器检索数据 cisco vlan outlook 正图试从Microsoft Exchange Server 检索数据。cisco 3750 vlan outlook is retrieving data from Microsoft Exchange Server mail.abc.com 最近对公司的网络按需要划分了基出802.1q的VLAN&#xff0c;…

二面京东,面试官直接问我JVM,我心里一阵暗爽~

二面京东&#xff0c;面试官直接问我JVM&#xff0c;我心里一阵暗爽~简直了&#xff0c;hhhh明人不说暗话&#xff0c;直接进入主题&#xff01;&#xff01;&#xff01;一、什么是JVM二、JAVA代码编译和执行过程类加载机制类执行机制三、JVM内存管理和垃圾回收垃圾回收按照基…

最后的代课老师———漆红玉[转]

1月31日凌晨6点我们从渭源县城出发&#xff0c;天还未亮。1月的甘肃干冷干冷的&#xff0c;我们是在半路上接的漆老师&#xff0c;刚开始我以为是寇筱茜老师的一个熟人&#xff0c;路上寇老师才和我说漆老师也是代课老师。寇筱茜老师有一句名言&#xff1a;每一个代课老师都有一…

ae渲染出现错误是什么问题_[Switch]解决OPENWRT路由,使用UU加速器等出现相同IP,DNS解析错误问题...

本文在之上添加DNS解析错误的解决方案解决 NS openwrt路由器 开腾讯 UU之类的加速器无法上网的问题​tieba.baidu.com将子网掩码转换为二进制&#xff0c;即为11111111.11111111.0.0&#xff0c;1有16位&#xff0c;令x16&#xff1b;IP地址若为aaa.bbb.ccc.ddd&#xff0c;设置…

程序员从入门到升级,或许可以看一看这几个公众号

全世界只有3.14 % 的人关注了青少年数学之旅快节奏的现代社会中&#xff0c;每个人都疲于奔命&#xff0c;“丧、累、太难了”已成为成年人的生活主题。难得的闲暇时间&#xff0c;公众号是不可或缺的消遣方式。但我们被海量数据淹没&#xff0c;越来越多的公众号只是消耗情绪&…

C# 向Main函数传递参数(程序启动时传递参数)

代码 staticvoidMain(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false);if(args.Length!0) { Application.Run(newF_WebIE(args[0])); }else{ Application.Run(newF_WebIE(null)); } }注意&#xff1a;不能把 参数 s…

12c oracle 修改内存_关于Oracle数据库12c 新特性总结

概述今天主要简单介绍一下Oracle12c的一些新特性&#xff0c;仅供参考。参考&#xff1a;http://docs.oracle.com/database/121/NEWFT/chapter12102.htm#NEWFT003https://docs.oracle.com/database/121/NEWFT/chapter12101.htm#NEWFT3481、不可见字段(Invisible columns)在 12c…

华为面试官问我:你真的明白Java垃圾回收器吗?我生气了!!(︶︿︶)

[第一阶段]&#xff1a;串行垃圾回收器&#xff1a;jdk1.3.1之前Java虚拟机仅仅只支持Serial收集器 [第二阶段]&#xff1a;并行垃圾回收器&#xff1a;随着多核的出现&#xff0c;Java引入了并行垃圾回收器&#xff0c;充分利用多核性能提升垃圾回收效率 [第三阶段]&#xff1…

看OpenCV如何在python中实现图像检测!

全世界只有3.14 % 的人关注了爆炸吧知识在我们生活中&#xff0c;常见的图像处理软件有Adobe Photoshop、Adobe Illustrator等。然而&#xff0c;并非只有软件才能实现图像处理&#xff0c;通过编程手段也是能实现的&#xff01;今天&#xff0c;小天将要带着大家走进计算机视觉…

dotnet 基于 dotnet format 的 GitHub Action 自动代码格式化机器人

是不是大家也会觉得代码审查里面审查代码格式化问题是无意义的&#xff0c;但是不审查又觉得过不去&#xff1f;是否有个专门的工具人&#xff0c;用来协助修复代码格式化的问题&#xff1f;本文来安利大家一个特别好用的方法&#xff0c;使用 dotnet 完全开源的专业格式化工具…

[导入]ASP.NET MVC的WebSite模式(with mvc membership)

一直极其讨厌web application,感觉不干净&#xff0c;不符合个人喜好完美纯净的代码的癖好&#xff0c;再加上不是单页程序集&#xff0c;性能也大打折扣。所以这次在决定用asp.net MVC写这个网站的时候花了一点时间移到Web site模式下面来。 其实不是很麻烦&#xff0c;修改We…

学妹面试拼刀刀被问Java策略模式是什么鬼?哈哈哈哈

学妹面试拼刀刀被问Java策略模式是什么鬼&#xff1f;哈哈哈哈 学妹跟我讲怎么机智面对的 我呆了&#xff01; &#x1f9fe;1.策略模式到底是什么鬼捏&#xff1f;&#xff1f;&#xff1f;&#x1f440; 策略模式属于对象的行为模式。其用意是针对一组算法&#xff0c;将每一…

基于Visual C++2010与windows SDK fo windows7开发windows7平台的tabletpc应用(1)-手写数学公式输入...

搭建好Visual C2010与windows SDK fo windows7的开发平台以后&#xff0c; 小试牛刀&#xff0c;检验下开发windows7的下的tabletpc应用&#xff0c;这个东西财务记账比较多&#xff0c; 大家先看效果&#xff0c;然后讲解详细代码 详情请见代码注释 // Windows 头文件 #includ…

你所阅读的,决定你是什么样的人

全世界只有3.14 % 的人关注了爆炸吧知识真正决定人与人之间的差距的&#xff0c;其实是我们对事物的见识与内心的格局&#xff0c;见识的深浅决定人生的深浅&#xff0c;格局的大小决定了人生之路是宽是窄。今天给大家推荐几个有深度、有想法的公众号&#xff0c;希望能够给你带…

下图为双总线结构机器的数据通路_海康机器人为物流加码:进击吧,双11新“打工人”...

今年的双11开启了迄今最长“战线”据国家邮政局初步预计&#xff0c;11月1日-16日全行业处理的邮(快)件业务量将达57.8亿件同比增长47%左右双11期间业务量将达29亿件比去年同期增长28%庞大的业务量和超快的物流速度&#xff0c;离不开智能终端、物联网、大数据等多重技术的支持…

设计模式之状态

状态模式介绍状态模式是一种行为设计模式&#xff0c;让你能在一个对象的内部状态变化时改变其行为&#xff0c;使其看上去就像改变了自身所属的类一样。根据状态不同&#xff0c;行为也不同状态模式描述的是一个行为下的多种状态变更&#xff0c;比如我们最常见的一个网站的页…

阿里最新面试必备项之Java的String类,持续更新中!

最新腾讯面试必备项之Java的String类&#xff0c;持续更新中&#xff01; 1.1 String的特性 String类&#xff1a;代表字符串。Java程序中的所有字符串字面值&#xff08;如“abc”&#xff09;都作为此类的实例实现。 String是一个final类&#xff0c;代表不可变的字符序列。…

Juster的MVP奋斗之路

大家好是朱震&#xff08;juster zhu&#xff09;MVP唯一id是5004326&#xff0c;这里主要给大家分享一下参选上MVP喜悦。首先非常感谢大伙对我的支持&#xff0c;在过去的8个多月里几乎每天都在写博客和做视频以及回答技术问题中度过。整个过程非常艰苦&#xff0c;身体不好真…

被嫌弃的蝗虫的一生

全世界只有3.14 % 的人关注了爆炸吧知识转载来源&#xff1a;混子曰部分素材源于网络&#xff0c;版权归原作者所有如有侵权请留言联系删除&#xff0c;感谢合作选购数学科普正版读物严选“数学思维好物”送给孩子的阅读礼物 | 办公室神器有益孩子一生的玩具 | 居家高科…