Tag: 命令查询分离

当一个命令需要结果数据时,如何应用命令查询分离(CQS)?

在维基百科的命令查询分离的定义,这是说 更正式的说,方法只有在它们具有透明性并且没有副作用的情况下才能返回价值。 如果我发出一个命令,我应该如何确定或报告该命令是否成功,因为通过这个定义该函数不能返回数据? 例如: string result = _storeService.PurchaseItem(buyer, item); 这个调用有一个命令和查询,但查询部分是命令的结果。 我想我可以重构这个使用命令模式,如下所示: PurchaseOrder order = CreateNewOrder(buyer, item); _storeService.PerformPurchase(order); string result = order.Result; 但是,这似乎是在增加代码的大小和复杂性,这不是一个非常积极的重构方向。 有人可以给我一个更好的方法来实现命令 – 查询分离,当你需要一个操作的结果吗? 我在这里错过了什么? 谢谢! 注意:Martin Fowler对cqs CommandQuerySeparation的限制有这个说法: Meyer绝对喜欢使用命令 – 查询分离,但也有例外。 popup堆栈是修改状态的修改器的一个很好的例子。 迈尔正确地说,你可以避免使用这种方法,但它是一个有用的习惯用法。 所以我更喜欢遵循这个原则,但我准备打破它,让我的stream行。 从他的angular度来看,除了一些小的简单例外之外,几乎总是要对命令/查询分离进行重构。