我正在努力理解并为我的测试微服务创建最好的方法。小额服务的结构如下:
应用层协调任务并委派工作。它有命令,EventHandlers,验证,
基础设施层处理数据和其他事情。以下是存储库的实现,db上下文,.
我需要引入一个应该从userService调用的服务(让我们称之为userService),这个服务将使用存储库来获取数据。
这个服务应该存放在哪里?
在基础设施层?如果是这样的话,如果我已经在这里使用公开的存储库,这有什么用呢?
在域层?域层不应该知道外部事物。
这使我只能选择应用层。因为这是一个web项目,所以我会把这个服务放在服务文件夹中。
如何构造微服务文件夹结构?
发布于 2019-09-08 18:27:19
如何构建一个基于微服务的项目有很多可能性。我建议如下:
然后,您的微服务可以在该解决方案中包含项目:
示例
假设您有2个微服务用户,并订购微型服务。您将有两个解决方案(每个微服务一个)和第三个内部结构解决方案:
- MyOrganisation.Users.Api
- MyOrganisation.Users.Domain
- MyOrganisation.Users.Test
- MyOrganisation.Orders.Api
- MyOrganisation.Orders.Domain
- MyOrganisation.Orders.Test
- MyOrganisation.Infrastructure.Api - nuget package
- MyOrganisation.Infrastructure.DataAccess - nuget package
- MyOrganisation.Infrastructure.Cache - nuget package
- MyOrganisation.Infrastructure.Test - nuget package
您的微服务将使用这些nuget包来重用公共逻辑,如数据访问和测试基础结构,以避免重复,而您的微服务将只关注业务逻辑,而不关注与基础设施相关的事情。当您编写新的微服务时,您不必在每个微服务中重复基础结构代码,您可以专注于域。随着项目的增长,您可以向基础结构库添加更多的公共和新内容。
回到你的问题:
我需要引入一个应该从userService调用的服务(让我们称之为userService),这个服务将使用存储库来获取数据。 这个服务应该存放在哪里?
我不太清楚你在这里的意思,但让我试着回答。如果您的UserService应该是另一个服务的一部分,那么您应该重新考虑将它放在它自己的微服务中。如果您正在从您的微服务中调用其他的微服务,并且您想知道这个呼叫应该发生在哪里。我想在你的.Domain项目中说。为什么?因为它与其他微服务进行某些业务操作的通信仍然是您的域的一部分。比如“为了下订单,我需要用户数据”。尽管如此,这仍然是订单微型服务业务运作的一部分,即使它正在调用另一个微服务。现在,对其他微服务的调用以及在技术上是如何实现的,您可以在其中一个基础设施库中拥有一个公共的基础结构逻辑。因为从另一个微服务中调用一个微服务,或者在它们之间使用某种类型的通信,同步或异步是大多数微服务所需要的,所以您应该将这个公共部分提取到基础结构代码中。
https://stackoverflow.com/questions/57794664
复制相似问题