母婴网站dede织梦,关键词推广seo,做fcr的网站,wordpress导航仿制原文链接#xff1a;https://logcorner.com/building-microservices-through-event-driven-architecture-part4-repositories/在本文中#xff0c;我将实现Repositories的命令端。存储库属于Clean架构的接口适配器在这一步中#xff0c;我将开始实现基础设施的命令端#x… 原文链接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实现了IRepositorySpeech, Guid其中Speech是 AggregateRootGuid是Speech.Id的类型无法为非AggregateRoot实体创建存储库例如MediaFileIUnitOfWork.Commit持久化保存或更新整个聚合AggregateRoot和相关实体UNITOFWORK让我们从测试IUnitOfWork开始它将导致UnitOfWork的实现。后者将需要一个从 DbContext继承的类。在我的情况下是 DataBaseContext测试1保存时IUnitOfWork.Commit应该保存聚合根并且DbContext.SaveChanges只调用一次UnitOfWork的实现让我们创建一个继承自DbContext的DataBaseContext类UnitOfWork第一次测试的最终实现实现UnitOfWork.Dispose测试2disposing时unitOfWork.Dispose只调用一次让我们实现UnitOfWork.Dispose()在此阶段解决方案编译通过所有测试均通过LogCorner.EduSync.Speech.Infrastructure的代码覆盖率为100%REPOSITORY测试3验证CreateAsync可以在Repository上调用并且应该触发dbset.AddAsyncRepository只能用AggregateRoot实例化所以让我们创建一个继承自 AggregateRoot的类进行测试。Repository的最终实现将如下所示SPEECHREPOSITORY测试4验证是否可以在SpeechRepository上调用CreateAsync并仅触发Repository.CreateAsync一次这个测试的目标是实现SpeechRepository所以我验证当SpeechRepository.CreateAsync 被调用时Repository.CreateAsync只被调用一次这是SpeechRepository的最终实现MAPPING本节的实现因使用的ORMEF、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“