[英]CQRS Pattern with .NET API - Separating the request object from the command/query
關於在 .NET API 中使用 CQRS 模式,我已經看到了一些示例,其中將請求直接反序列化為命令/查詢,然后將其發送出去進行處理,如下所示:
[HttpPost]
public async Task<IActionResult> CreateOrder(CreateOrderCommand command)
{
var result = await _mediator.Send(command);
return Ok(result);
}
在其他示例中,使用某種 dto 或請求 object,然后將其饋送到命令/查詢的構造函數中,如下所示:
[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);
}
第一種方法對我來說更有吸引力,因為它少了一個 model 和代碼行。 您是否有理由使用第二種方法並將請求 object 與命令 object 分開?
您是否有理由使用第二種方法並將請求 object 與命令 object 分開?
是的 - 域 model 的變化速度比您面向公眾的界面更快。
CreateOrderDto
是一個在 memory 中表示的請求負載; 其模式是記錄供客戶使用的東西。 對其進行“破壞性”更改很困難,因為它會影響所有消費者。
CreateOrderCommand
是 memory 中用於在應用程序和域 model 之間通信的數據的表示。 兩個關注點之間的距離大大縮短,因此更容易協調對話兩端的變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.