我应该在哪里将使用NestJs的httpRequest放入CQRS体系结构?

问题描述 投票:1回答:1

所以是CQRSDDD的新手,并且正在使用Nestjs来开发微服务体系结构,遇到了这个问题,我可以在order Microservice上工作,通过控制器从客户端接收到订单对象,我将其传递给command进行处理,但我首先需要检查订单对象附带的数据是否正确或否,因此我需要对其进行检查其他微服务,因为我们不使用共享数据层,例如每个微服务都有它自己的数据层(对象具有客户端ID和名称,我需要使用httpRequest检查客户端是否确实存在于微服务身份验证数据库中...),那么我应该将httpRequest放在OrderCommandHandler的哪一层,还是应该在Controller层中创建checkService进行检查?我想知道最佳做法。

domain-driven-design microservices nestjs cqrs
1个回答
1
投票

使用微服务时发出同步Web请求并不是理想的情况,因为许多公司都提供中间件服务。原因是这在两个服务之间引入了时间耦合。如果您的依赖性下降或没有得到服务,则您的请求失败。

一种更好地遵循DDD的更好的解决方案是考虑您拥有的实际过程是什么,并查看存在的责任。通常,当您这样做时,您最终会遇到BC边界(该边界会转换为微服务API表面),这些边界会更加紧密地结合在一起,并且通常能够完全执行某项操作。

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

  1. 将处理分为两部分:

    1. 一个部件收到“ OrderRequestes”命令并根据您的业务需求对其进行验证,然后触发“ OrderValidated”事件
    2. 系统的另一部分拾取“ OrderValidates”事件,并以隐含的假设(即那里的数据已经过验证可以正常处理)进行处理
  2. 将数据子集的副本放入您需要的数据中,以便在处理订单请求的服务内部进行验证。如果没有问题可以在本地复制数据,并且如果它有点陈旧就没问题,这是一个非常自然的解决方案

  3. 如果需要尽可能保持一致,请设计流程,以便正在执行订单处理的服务拥有数据,以便在处理之上进行验证。请注意,从表面上的经验来看,人们会要求尽可能地保持一致,但实际上这并不总是真正的关注点,并且上述解决方案之一将更易于实现和支持。 (也请考虑一下,如果您使用网络请求来验证订单,但是在返回验证结果之后,在处理订单之前,发生了一些更改,因此该订单将不再有效),您会遇到什么情况?

© www.soinside.com 2019 - 2024. All rights reserved.