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