簡體   English   中英

帶有 .NET API 的 CQRS 模式 - 將請求 object 與命令/查詢分開

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM