Domain driven design 在使用NestJs的CQRS体系结构中,我应该将httpRequests放在哪里?

Domain driven design 在使用NestJs的CQRS体系结构中,我应该将httpRequests放在哪里?,domain-driven-design,microservices,nestjs,cqrs,Domain Driven Design,Microservices,Nestjs,Cqrs,因此,我刚接触过CQRS和DDD,正在使用Nestjs开发微服务架构,我遇到了这个问题,我使用的是一个订单微服务,其中我通过控制器从客户机接收订单对象,并将其传递给命令来处理它,但我需要首先检查订单对象附带的数据是否正确,因此我需要在其他微服务中检查它,因为我们不要使用共享数据层例如,每个微服务都有自己的数据层(该对象有一个客户端Id和名称,我需要使用httpRequests检查客户端是否确实存在于微服务身份验证数据库中…)那么,我应该将我的httpRequest放在哪一层,它是在OrderCo

因此,我刚接触过CQRSDDD,正在使用Nestjs开发微服务架构,我遇到了这个问题,我使用的是一个订单微服务,其中我通过控制器从客户机接收订单对象,并将其传递给命令来处理它,但我需要首先检查订单对象附带的数据是否正确,因此我需要在其他微服务中检查它,因为我们不要使用共享数据层例如,每个微服务都有自己的数据层(该对象有一个客户端Id和名称,我需要使用httpRequests检查客户端是否确实存在于微服务身份验证数据库中…)那么,我应该将我的httpRequest放在哪一层,它是在OrderCommandHandler中,还是应该在创建checkService的控制器层中进行检查?
我想知道最佳实践。

许多提供中间件服务的公司都认为,在使用微服务时发出同步web请求并不是理想的情况。原因是这在两个服务之间引入了时间耦合;如果您的依赖关系已关闭或未提供服务,则您的请求将失败

<> P>一个更好的解决方案,坚持DDD更好地是考虑什么是你的实际过程,并看到存在的责任。通常,当您这样做时,您最终会得到BC边界(它传输到microservice API表面),它更具一致性,并且通常能够完全完成操作

我从您这里掌握的很少信息中看到的三个选项是:

  • 将处理分为两部分:

  • 其中一部分接收“OrderRequestes”命令,并根据您的业务需求对其进行验证,然后触发“OrderValidated”事件
  • 系统的另一部分接收“OrderValidates”事件,并隐式地假设那里的数据已经被验证过了
  • 在将处理订单请求的服务内部放置一份进行验证所需的数据子集的副本。如果本地复制数据没有问题,如果数据有点过时也没有问题,那么这是一个非常自然的解决方案

  • 如果您需要尽可能保持一致,请设计流程,使进行订单处理的服务拥有所需的数据,以便在处理的基础上进行验证。请注意,根据经验,虽然表面上人们会要求尽可能立即保持一致,但实际上这并不总是一个真正的问题,而且上述解决方案之一更容易实施和支持。(另外,如果您使用web请求验证订单,但在返回验证结果之后,在处理订单之前,发生了一些更改,因此订单不再有效,那么您的案例会发生什么情况)