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