相关疑难解决方法(0)

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

在维基百科的命令查询分离定义中,有人说

更正式地说,方法只有在它们是引用透明的情况下才能返回值,因此没有副作用.

如果我发出命令,我该如何确定或报告该命令是否成功,因为通过此定义,该函数无法返回数据?

例如:

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绝对喜欢使用命令查询分离,但也有例外.弹出堆栈是修改状态的修饰符的一个很好的例子.梅耶正确地说你可以避免使用这种方法,但这是一个有用的习惯用法.所以我喜欢在我可以的时候遵循这个原则,但我准备打破它以获得我的流行音乐.

从他的观点来看,重构命令/查询分离几乎总是值得的,除了一些小的简单例外.

c# command-query-separation

62
推荐指数
3
解决办法
2万
查看次数

标签 统计

c# ×1

command-query-separation ×1