【问题标题】:CreateOrderCommandHandler - should I fetch a product price from a read database or a write database?CreateOrderCommandHandler - 我应该从读取数据库还是写入数据库中获取产品价格?
【发布时间】:2022-11-19 18:28:16
【问题描述】:

我想在我的命令处理程序 CreateOrderCommandHandler 中获取产品价格以创建订单聚合并将其保存在写入数据库中。我怎样才能做到这一点?我应该从命令处理程序中的读数据库还是写数据库获取产品价格?

public class CreateOrderCommandHandler : IRequestHandler<CreateOrderCommand>
{
    private readonly IEventStoreRepository _eventStoreRepository;

    public CreateCustomerCommandHandler(
        IEventStoreRepository eventStoreRepository)
    {
        _eventStoreRepository = eventStoreRepository;
    }

    public async Task<Unit> Handle(CreateOrderCommand request, CancellationToken cancellationToken)
    {
        var order = new Order(Guid.NewGuid(), request.CustomerId);
        foreach (var item in request.OrderItems)
        {
            order.AddOrderItem(item.ProductId, item.Quantity, /* price */);
        }

        await _eventStoreRepository.Save(order);

        return Unit.Value;
    }
}

public class CreateOrderCommand : IRequest
{
    public Guid CustomerId { get; }
    public List<CreateOrderItemCommand> OrderItems { get; }

    public CreateOrderCommand(Guid customerId, List<CreateOrderItemCommand> orderItems)
    {
        CustomerId = customerId;
        OrderItems = orderItems;
    }
}

public class CreateOrderItemCommand // I don't have Price property here because these data come from a user
{
    public Guid ProductId { get; set; }

    public int Quantity { get; set; }
}

【问题讨论】:

    标签: c# domain-driven-design cqrs


    【解决方案1】:

    我建议您应该根据参数(最好是枚举)使阅读可配置。它的值应该像PreferReadDB、PreferMasterDB、FallbackToWriteDB、OnlyReadFromReadDb。

    因此,根据情况,您可以通过传递所需的枚举来调用 read 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      相关资源
      最近更新 更多