。NET API的CQRS模式-从命令/查询中分离请求对象

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

关于在.NET API中使用CQRS模式,我已经看到了一些将请求直接反序列化到命令/查询中,然后将其发送出去进行处理的示例,例如:

[HttpPost]
public async Task<IActionResult> CreateOrder(CreateOrderCommand command)
{
    var result = await _mediator.Send(command);
    return Ok(result);
}

在其他示例中,代替地使用某种dto或请求对象,然后将其馈送到命令/查询的构造函数中,如下所示:

[HttpPost]
public async Task<IActionResult> CreateOrder(CreateOrderDto model)
{
    var command = new CreateOrderCommand(model.orderNumber, model.firstName...);
    var result = await _mediator.Send(command);
    return Ok(result);
}

第一种方法对我来说更具吸引力,因为它的模型和代码行少了。有没有理由使用第二种方法,将请求对象与命令对象分开?

c# .net api cqrs mediatr
1个回答
2
投票

您是否有理由使用第二种方法并将请求对象与命令对象分开?

是的-域模型的变化速度比面向公众的界面快。

CreateOrderDto是请求有效负载的内存表示形式;其架构已记录下来,供客户使用。对其进行“突破性”更改很困难,因为它的更改会影响您的所有消费者。

CreateOrderCommand是内存中的数据表示形式,用于在应用程序和域模型之间进行通信。两个问题之间的距离大大减小,因此协调对话两端的更改要容易得多。

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