.net Microservice文件夹组织,使用带有存储库的服务

.net Microservice文件夹组织,使用带有存储库的服务,.net,microservices,.net,Microservices,我正在努力理解并为我的测试微服务创建最佳方法。 微服务的结构如下: MyTestService.API//表示应用程序层 MyTestService.Domain//表示域层 MyTestService.Infrastructure//表示基础结构层 应用层协调任务并委派工作。它有命令、事件处理程序、验证等 基础架构层处理数据和其他事情。下面是存储库、数据库上下文 我需要引入一个服务(我们称之为userService),它应该从MyTestService.API调用。此服务将使用存储库来获取

我正在努力理解并为我的测试微服务创建最佳方法。 微服务的结构如下:

  • MyTestService.API//表示应用程序层
  • MyTestService.Domain//表示域层
  • MyTestService.Infrastructure//表示基础结构层
应用层协调任务并委派工作。它有命令、事件处理程序、验证等

基础架构层处理数据和其他事情。下面是存储库、数据库上下文

我需要引入一个服务(我们称之为userService),它应该从MyTestService.API调用。此服务将使用存储库来获取数据

此服务应存储在何处

在基础设施层?如果是这样,如果我已经在这里使用了公开的存储库,那么这有什么用呢

在域层中?域层不应该知道外部事物

这使我只能选择应用层。由于这是一个WebAPI项目,我将把这个服务放在服务文件夹中


您将如何构建您的microservice文件夹结构?

您可以通过多种方式构建基于micro service的项目。我建议如下:

  • 每个微服务都在一个单独的解决方案中 将每个微服务放在一个单独的解决方案中有多种好处。其中一些是:独立的微服务(或域)团队,能够在需要时为每个微服务使用不同的技术,更小的代码库等等

  • MyTestService.Infrastructure将基础结构代码提取到单独的项目中,并从中创建库(nuget包)。如果您的基础架构包含用于数据库访问、缓存交互、身份验证和类似公共功能的代码,那么您可以创建一个库并在多个微服务中重用它。在这种情况下,您的基础架构将是不可知域的,并且只关注多个微服务的通用解决方案

然后,您的微服务可以在该解决方案中包含项目:

  • MyTestService.Domain这应该包含一个特定微服务及其域的所有域/业务逻辑。在这里,您应该放置与特定微服务相关的业务逻辑代码,如验证、命令和事件的处理程序等。该层将基础设施用作共享库,以便执行数据库访问、缓存交互和类似操作。请记住,每个微服务都有自己的域项目。如果使用DDD(域驱动设计),可以将此域项目分成多个部分。你可以在网上快速搜索。DDD项目的结构有很多例子

  • MyTestService.API这将是带有RESTAPI端点的WebApi项目。这里有控制器、ApiModels和引导项目所需的东西,如依赖项注入组合根和类似的东西。您将在本项目的多个解决方案中使用的内容也可以提取到基础架构中,并在多个微服务API(WebApi)项目中重用它。这个项目将是你的微服务的入口点,每个人都试图像使用http一样直接调用你的微服务。从这里,您可以将调用分发到.Domain项目中的特定代码

  • MyTestService.Domain.Test和MyTestService.API.Test。如果编写测试,可以添加的另一个测试是MyTestService.Domain.Test和/或MyTestService.API.Test。在这里,您可以为您的2个项目进行单元测试和集成测试。同样,您可以有一些测试设置和公共测试基础设施,可以将它们放入基础设施库中

  • 示例

    假设您有2个微服务用户并订购微服务。您将有2个解决方案(每个微服务一个),第三个用于内部结构:

  • 解决方案用户微服务。这将有以下项目:

    • myorganization.Users.Api
    • myorganization.Users.Domain
    • myorganization.Users.Test
  • 解决方案订购微服务。这将有以下项目:

    • myorganization.Orders.Api
    • MyOrganization.Orders.Domain
    • 组织、命令、测试
  • 基础设施

    • myorganization.Infrastructure.Api-nuget包
    • MyOrganization.Infrastructure.DataAccess-nuget包
    • myorganization.Infrastructure.Cache-nuget包
    • MyOrganization.Infrastructure.Test-nuget包
  • 您的微服务将使用这些nuget包重用公共逻辑,如数据访问和测试基础设施,以避免重复,并且您的微服务将只关注业务逻辑,而不关注与基础设施相关的事情。在编写新的微服务时,您不必在每个微服务中重复基础结构代码,您可以专注于域。随着项目的发展,您将向基础架构库添加更多的常见和新内容

    回到您的问题:

    我需要引入一个服务(我们称之为userService),它 应该从MyTestService.API调用。此服务将使用 以获取数据

    此服务应存储在何处

    我不太清楚你在这里的意思,但让我试着回答。 如果你的用户服务应该是另一个服务的一部分,那么你应该重新考虑把它放到它自己的微服务中。 如果您正在从所呼叫的微服务中呼叫其他微服务,并且您想知道该呼叫应该发生在哪里。我会说在你的.Domain项目中。为什么?是