簡體   English   中英

CQRS實現中每個HTTP請求的多個命令

[英]Multiple commands per HTTP request in CQRS implementation

這個問題可能是要求太多的集成細節,但我希望它是重點。

在我的簡單CQRS應用程序中,我有一個HTTP PUT請求如下所示,它應該更新產品的詳細信息:

PUT http://localhost/products/088c1cb1-7e74-40b1-9900-4b9722f1dd85/details HTTP/1.1
Content-Type: application/json
Host: localhost

{
    description: "foo bar",
    warningDescription: "foo bar",
    dangerDescription: "foo bar",
}

當我收到此請求時,我想生成三個命令,而不是立即更新它:

  • UpdateProductDescription
  • UpdateProductWarningDescription
  • UpdateProductDangerDescription

這實際上是您在CQRS方面所期望的適當行為,還是寧願使用UpdateProductDetails命令?

我認為這取決於您如何在您的域或上下文中定位“產品”及其“描述”。 如果僅更新描述會對您的上下文產生業務影響,我將使用UpdateProductDescription命令並處理該命令。

但是,如果更新描述就像更新產品的其他屬性一樣, UpdateProductDetail命令就可以了。

你應該為每個http請求提出多個命令嗎? 可能你不應該。 如果某些命令成功但其他命令不成功怎么辦? 您是在一個工作單元中處理多個命令嗎? 即使你這樣做,是否正確使用指揮? 我對此表示懷疑。 您是否願意在http處理程序中實現回滾邏輯?

注意,在CQRS中,命令可以導致目標聚合根“全部或全部”方式中的多個事件,因為事件不會失敗。 但命令可以。

因此, “一個導致多個特定事件的通用命令”是一個更好的選擇,然后嘗試“在一個調用中組合多個特定命令”

您的聚合根應該決定在特定事件中如何表達該通用命令。

所以你的邏輯是這樣的:

UpdateGenericProductDescription -> (CommandHandler) -> AggregateRoot -> [ProductDescriptionUpdated, ProductWarningDescriptionUpdated, ProductDangerDescriptionUpdated]

請注意,即使您的業務需要更多的粒度,您的命令也可以保持通用,除非另有要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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